2

我在某处看到了这段代码片段:

var idx = SOME_VALUE;

var color = {
  yellor: 1,
  red: 2,
  black: 0
};

var x = color[idx] || []; // Is this means if color[idx] is null, then return an empty array?

我只能猜测代码的var x = color[idx] || [];意思是如果color[idx]为null,则返回一个空数组到x,否则x = color [idx]。我对吗?

不过,我需要一个解释。这段代码是否与下面的逻辑相同?

CONDITION==VALUE? TRUE_goes_here : FALSE_goes_here
4

5 回答 5

4

这意味着如果color[idx]是“假的”,则使用空数组代替。“虚假”值是(false当然)、、、、、和(所有其他值都是“真实的”)。这个习语是 JavaScript非常强大的运算符* 的一个例子。0NaN""undefinednull||

在这种情况下,如果color不包含名称包含的属性,则提供默认值idx(因为当您索引到这样的对象并且键与任何现有属性名称不匹配时,结果为undefined):x将是1(如果idx是“yellor”),2(如果idx是“红色”),0(如果idx是“黑色”),或者[]如果idx是其他任何东西。

所以在你的问题结束时回答你的问题,基本上,是的。它的:

var x = color[idx];
if (!x) {
    x = [];
}

或者

var x = color[idx] ? color[idx] : [];

* (这是我贫血的小博客上的一篇文章。)

于 2011-04-18T17:11:52.947 回答
1

你是对的。

在 Javascript 中,a || b计算为第一个“真实”操作数。
如果a是“假的”(例如 , null, false, ) undefined0它将评估为b

于 2011-04-18T17:12:30.943 回答
0

or运算符将为您提供第||一个不评估为条件的值false(like0nulldo)。

这意味着 using0 || null || 5将产生 5 作为结果。

该代码中的内容是 JavaScript 中的一种常见做法,它使用||运算符在变量初始化时指定默认值。那只是因为

var x = something || default_value;

比可读性强一点

var x = (something ? something : default_value);
于 2011-04-18T17:15:00.803 回答
0
var x = color[idx] || [];

如果color是一个对象,其属性名称为String(idx),并且该属性的值是真实的,则将该属性的值分配给x. 否则,设x为空数组。

于 2011-04-18T17:15:19.297 回答
0

在这种情况下,||是“布尔或”运算符。与许多语言一样,JavaScript 中的布尔运算符是短路的。例如,假设我有以下布尔表达式:

var booleanValue = someFunction() || otherFunction()

如果第一个函数返回的值是真等价的,则不需要评估第二个值并且otherFunction()不会执行,因为“或”运算符返回一个真等价值,无论它的某些操作是否为真等价。这很好,因为它使您的代码更高效:只评估所需的表达式。

此外,在这种情况下还有一个奇怪的行为:因为表达式的第一个值是真等价的,JavaScript 只是将它作为表达式的结果返回,因为这意味着整个表达式无论如何都是真的。

在您的代码中,如果设置了值,color[idx]则为真等效。由于它是“或”运算中的真等效值,因此它作为表达式的值返回。但是,如果未设置,undefined则返回,这是一个假等效值。因此 JavaScript 必须评估下一个值来定义“或”表达式是否为真。由于下一个值是最后一个值并且表达式的值完全取决于它,如果第一个值是假等价的,则表达式返回下一个值。

于 2011-04-18T17:23:15.183 回答