2012-08-03 50 views
1

我有一个使用这个符号,以确保一个对象初始化一个JavaScript:对象等于自我或空对象

MyObject = MyObject || {}; 

我明白它做什么,即检查羯羊MyObject的是什么,如果不分配一个空对象MyObject。我并不完全了解JS的所有内部特性,所以我不知道如何在一个任务中使用逻辑比较。

它是如何工作的?有没有其他语言允许这样做?

回答

2

取决于语言。

例如,在Ruby中,您可以使用此样式。

但是在PHP中,你不能使用这种风格,因为在PHP中,逻辑运算符总是返回一个布尔值(true/false)。

结论:

如果逻辑运算符总是返回一个布尔值,那么你不能使用这种风格。

如果逻辑运算符返回第一个值,当第一个值为真时,否则返回第二个值,那么您可以使用这种样式。

+0

我想这是JS解释未定义值为false的组合,并且逻辑比较不一定会返回一个bool。感谢你和Peter的澄清。 – jurgemaister 2012-08-03 12:49:26

1

逻辑“或”操作符具有短路语义,这意味着右操作数仅在左手边操作数评估为false时才被评估。因此,如果MyObject初始化,则该语句读取MyObject = MyObject;(不做任何事),否则它是MyObject = {};

+1

+1在我看来最好的答案 – imwill 2012-11-12 15:10:53

2

此语法的意思是“如果已定义,则自行分配MyObject;否则,给它一个空对象。”

它的工作原理是,Javascript将未定义的值视为false,并将其定义为true。将其与逻辑表达式的懒惰评估相结合,就会得到上述行为。