我最近了解到 JavaScript 命名空间以及如何使用它们像其他流行的 OOP 语言一样创建命名空间。我对它们的声明方式感到困惑。例如,
var myNamespace = myNamespace || {};
创建名为 myNamespace
的命名空间(如果尚未创建)。如果已创建,只需将其传递到 var myNamespace
中即可。
我无法理解myNamespace || 是什么{}
确实如此。
myNamespace
一开始不是未定义的吗?您如何在 bool 表达式中比较它。
此外,对象字面量 {}
是如何工作的?它是否创建一个空对象并将其分配给 myNamespace
以用作命名空间?
我尝试寻找有关 SO 的答案,但是关于如何声明不同类型的命名空间的实践过于饱和。
最佳答案
虽然||
最初是为了使用 bool 值,但它是以一种非常方便的方式实现的,允许它设置默认值:
function or(a, b) {
if (a) return a
else return b
}
您可以在脑海中对此进行测试,看看它是否适用于 bool 值:如果 a
为 true
,则结果为 true
,因此结果与a
相同。如果a
为false
,则结果取决于b
。
JavaScript 中使用 var
进行变量声明的方式有点奇怪。您可以在同一范围内重新声明具有相同标识符的变量。所以代码的工作方式是:
- 如果
myNamespace
已声明,您可以重新声明该变量,但尚未对其进行赋值。您可以从myNamespace
的旧声明中获取值。该值被假定为真值,因此||
将返回它。 - 如果
myNamespace
尚未声明,则声明它,然后myNamespace
将是undefined
,一个虚假值。因此||
将返回第二个值,即{}
,该值将分配给myNamespace
。
分两个单独的步骤阅读它可能是有意义的:
//Declare the variable if it doesn't exist,
//without overwriting an existing value
var myNamespace
//Take the value of myNamespace (undefined if it didn't exist yet)
//and replace it with {} if it is falsy
myNamespace = myNamespace || {}
关于JavaScript 命名空间对象字面量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45621861/