我有一个 JavaScript 使用这个符号来确保一个对象被初始化:
MyObject = MyObject || {};
我了解它的作用,即检查 MyObject 是否是任何东西,如果没有将空对象分配给MyObject
. 我真的不太了解 JS 的所有内部结构,所以我看不出如何在赋值中使用逻辑比较。
它是如何工作的?是否有任何其他语言允许这样做?
我有一个 JavaScript 使用这个符号来确保一个对象被初始化:
MyObject = MyObject || {};
我了解它的作用,即检查 MyObject 是否是任何东西,如果没有将空对象分配给MyObject
. 我真的不太了解 JS 的所有内部结构,所以我看不出如何在赋值中使用逻辑比较。
它是如何工作的?是否有任何其他语言允许这样做?
这种语法的意思是“分配MyObject
给它自己,如果它被定义了。否则,给它一个空对象。”
它之所以有效,是因为 Javascript 将未定义的值视为 false,而将已定义的值视为 true。将其与逻辑表达式的惰性求值相结合,您将获得上述行为。
取决于语言。
例如,在 Ruby 中,您可以使用这种样式。
但是在 PHP 中,你不能使用这种风格,因为在 PHP 中,逻辑运算符总是返回一个布尔值(真/假)。
结论:
如果逻辑运算符总是返回一个布尔值,那么你就不能使用这种风格。
如果逻辑运算符在第一个值评估为 true 时返回第一个值,否则返回第二个值,那么您可以使用这种样式。
逻辑“或”运算符具有短路语义,这意味着仅当左侧操作数评估为 时才评估右侧操作数false
。因此 ifMyObject
被初始化,语句读取MyObject = MyObject;
(它什么都不做),否则它是MyObject = {};
.