我有一个使用这种表示法的JavaScript来确保对象被初始化:
MyObject = MyObject || {};
我理解它的作用,即检查是否有任何东西,如果没有将空对象分配给MyObject
。我真的不太了解JS的所有内部结构,所以我没有看到如何在赋值中使用逻辑比较。
它是如何工作的?有没有其他语言允许这个?
答案 0 :(得分:2)
此语法的意思是“如果已定义,则将MyObject
分配给自身。否则,请为其指定空对象。”
它的工作原理是因为Javascript将未定义的值视为false,并将定义的值视为true。将其与逻辑表达式的惰性求值相结合,就可以得到上述行为。
答案 1 :(得分:2)
取决于语言。
例如,在Ruby中,您可以使用此样式。
但是在PHP中,你无法使用这种风格,因为在PHP中,逻辑运算符总是返回一个布尔值(true / false)。
的结论:强> 的
如果逻辑运算符始终返回布尔值,则无法使用此样式。
如果逻辑运算符在第一个值计算为true时返回第一个值,否则返回第二个值,则可以使用此样式。
答案 2 :(得分:1)
逻辑'''运算符具有短路语义,这意味着只有左手操作数评估为false
时才会评估右手操作数。因此,如果<{1}} 被初始化,则语句将显示MyObject
(不执行任何操作),否则为MyObject = MyObject;
。