#javascript
#javascript
Вопрос:
var Blah = Blah || {};
или
if ((typeof Blah) == 'undefined') {
var Blah = {};
}
Есть ли разница или оба делают одно и то же?
Ответ №1:
Разница есть. Первое присваивает Blah
значение Blah
, но если Blah
это ложное значение (то, которое присваивается false
в логическом контексте, например NaN
, undefined
0
и ''
), оно будет присвоено Blah
пустому объекту.
Второй присваивает Blah
значение пустому объекту только в том случае, если это точно undefined
, поскольку единственным значением с typeof
типом undefined
является undefined
.
Кроме того, вы создаете просто объекты, а не пространства имен. Даже концепция пространств имен в JavaScript в лучшем случае сомнительна; в большинстве случаев это делается путем создания самозваной анонимной функции, которая экспортирует некоторые вещи в глобальный объект, а не другие.
Ответ №2:
Первый присваивает объекту Blah
, если текущее значение Blah
равно false.
Второй присваивает объекту Blah
, если текущее значение не определено.
В JavaScript нет никакого понятия о пространствах имен. Это просто термин, используемый, когда куча связанного кода предоставляет все свои общедоступные части через единственную глобальную переменную. Поскольку оба эти объекта являются пустыми, пространства имен не существует.