1

我有一个 JavaScript 使用这个符号来确保一个对象被初始化:

MyObject = MyObject || {};

我了解它的作用,即检查 MyObject 是否是任何东西,如果没有将空对象分配给MyObject. 我真的不太了解 JS 的所有内部结构,所以我看不出如何在赋值中使用逻辑比较。

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

4

3 回答 3

2

这种语法的意思是“分配MyObject给它自己,如果它被定义了。否则,给它一个空对象。”

它之所以有效,是因为 Javascript 将未定义的值视为 false,而将已定义的值视为 true。将其与逻辑表达式的惰性求值相结合,您将获得上述行为。

于 2012-08-03T07:47:19.463 回答
2

取决于语言。

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

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

结论:

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

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

于 2012-08-03T07:48:01.537 回答
1

逻辑“或”运算符具有短路语义,这意味着仅当左侧操作数评估为 时才评估右侧操作数false。因此 ifMyObject 初始化,语句读取MyObject = MyObject;(它什么都不做),否则它是MyObject = {};.

于 2012-08-03T07:46:52.237 回答