在javascript中分配不存在的变量

时间:2014-06-03 16:05:53

标签: javascript properties variable-assignment

我发现了一行JavaScript代码,我不清楚它是如何工作的。让我们说window对象之前没有设置任何app属性:

var app = window.app || {};

问题是 - 为什么JS不会为app对象的不存在的window属性抛出任何ReferenceError,而是将window.app创建为{} - 为什么?如果我执行以下行:

var a = b || {}

我得到了ReferenceError: b is not defined,我就可以了。另外,我理解xxx || {}表达式 - 如果它不是假的话,它返回第一个元素,否则返回第二个元素。例如,使用空白对象初始化未定义的内容非常有用(例如,JS中的默认函数参数)。

1 个答案:

答案 0 :(得分:3)

尝试使用未声明的变量时,您只会获得参考错误,永远不会出现未定义的属性。

如果左侧是真值,则

||返回左侧,否则返回右侧。

window.app未定义,因此它是假值。因此它返回右侧:{}

然后将评估或声明的结果分配给app

如果app是全局变量(即未在函数内声明),则将创建app对象的属性window。这不是在测试中使用window.app的结果。这正是全局变量的工作原理。