这两种方法都创建名称空间吗?还是有区别?

Do both of these create a namespace, or is there a difference?

本文关键字:有区别 空间 方法 两种 创建      更新时间:2023-09-26
var Blah = Blah || {};

if ((typeof Blah) == 'undefined') {
  var Blah = {};
}

是有区别还是两者都做同样的事情?

有区别。第一个将Blah赋值给Blah,但如果Blah是假值(在布尔上下文中类型转换为false的值,例如NaN, undefined, 0''),则将Blah设置为空对象。

第二个命令只在恰好是undefined的情况下将Blah设置为空对象,因为typeof类型undefined的唯一值是undefined

同样,您只是在创建对象,而不是名称空间。甚至JavaScript中名称空间的概念也不确定;大多数情况下,它是通过创建一个自调用的匿名函数来完成的,该函数将一些内容导出到全局对象中,而不将其他内容导出到全局对象中。

如果Blah的当前值为false,则将一个对象赋值给Blah

如果当前值未定义,则将一个对象赋值给Blah

JavaScript没有任何名称空间的概念。这只是一个术语,当一堆相关代码通过单个全局变量公开其所有公共部分时使用。因为这两个都是空对象,所以没有名称空间。