Оба они создают пространство имен, или есть разница?

#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 нет никакого понятия о пространствах имен. Это просто термин, используемый, когда куча связанного кода предоставляет все свои общедоступные части через единственную глобальную переменную. Поскольку оба эти объекта являются пустыми, пространства имен не существует.