"var app = app || {};"的作用是什么?

15

我正在查看一些Backbone.js的例子,它们在所有.js文件的顶部都有var app = app || {};。 我理解这个的字面意思,但它在参考其他所有内容时是什么作用?

编辑:你们真的非常快。

4个回答

23

如果变量 app 还未被定义,它会被赋值为空对象。

这种方式有效是因为在JavaScript中, 未定义的变量会被解释为 false

即使已经定义了变量,它仍然可以被重新定义为空对象,只要它的值被解释为 false,例如空字符串。


3
具体而言,如果app的值为假,就将app定义为空对象。 - Brad
如果它已经被定义,它将重新在文件范围内进行定义。重新定义意味着该变量已经存在于当前作用域中。 - user1106925
是的,它实际上什么也不会做,因为它已经在全局范围内了。如果这是在一个函数中,它将在局部范围内重新定义。我会澄清。 - nullability
好的,那么 var app = app; 实际上什么也不会做。 - nullability
1
这个答案略有不正确。这个答案应该说“如果它是真实的”,而不是“如果它还没有被定义”。以下示例说明了为什么这个答案是不正确的:var app = false; app = app || {}; /*App现在等于{},因为app是“falsey”*/。请参考@recursive的答案获取正确答案。 - Steven Wexler
显示剩余2条评论

17

|| 运算符在 Javascript 中,如果第一个操作数为“真值”则返回它。否则,返回第二个操作数。如果 app 没有被赋值,则会是 undefined,即为“假值”。因此,如果没有定义或者是其他假值,就会将空对象 {} 赋值给 app


6
这意味着如果app未被定义,将其定义为空对象。

在JavaScript中,OR运算符不一定生成一个布尔值。如果表达式的左侧产生了false,则赋值采用了表达式的右侧。


2
如果app已经定义了,那么它什么也不做。 如果app未定义,则等同于 var app = {};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接