我发现了一行 JavaScript 代码,但我不太清楚它是如何工作的。假设 window
对象之前没有设置任何 app
属性:
var app = window.app || {};
问题是 - 为什么 JS 不会为 window
对象不存在的 app
属性抛出任何 ReferenceError ,而是创建 window.app
为 {}
- 为什么?如果我执行以下行:
var a = b || {}
我收到ReferenceError: b is not Defined
,我对此表示同意。此外,我确实理解 xxx || {}
表达式 - 如果第一个元素不为假,则返回第一个元素,否则返回第二个元素。例如,使用空白对象初始化未定义的内容很有用(例如 JS 中的默认函数参数)。
最佳答案
只有在尝试使用未声明的变量时才会出现引用错误,而不会出现未定义的属性。
||
如果左侧为真值,则返回左侧,否则返回右侧。
window.app
未定义,因此它是一个假值。因此,它返回右侧:{}
。
然后将 or 语句的计算结果分配给 app
。
如果 app
是全局变量(即未在函数内声明),则 window
对象的属性 app
将被创建。这不是在测试中使用 window.app
的结果。这就是全局变量的工作原理。
关于javascript - 在javascript中分配不存在的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019847/