使用||的代码的确切含​​义是什么? (“OR”)运算符?

时间:2011-04-18 17:09:52

标签: javascript logical-operators

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

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]为空,则将空数组返回x,否则x = color [idx]。我是对的吗?

不过,我需要一个解释。此代码是否具有与以下相同的逻辑?

CONDITION==VALUE? TRUE_goes_here : FALSE_goes_here

5 个答案:

答案 0 :(得分:4)

这意味着如果color[idx]是“假的”,则使用空数组。 “Falsy”值为false(当然),0NaN""undefinednull(所有其他值均为“truthy”)。这个成语是JavaScript curiously powerful || operator *。

的一个例子

在这种情况下,如果color不包含idx所包含的名称的属性,则它会提供默认值(因为当您索引像这样的对象而密钥不是匹配任何现有的属性名称,结果为undefined):x将为1(如果idx为“yellor”),2(如果{{ 1}}是“红色”),idx(如果0是“黑色”),或idx如果[]是其他任何内容。

所以在问题的最后回答你的问题,基本上是的。它是:

idx

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

* (这是我贫血的小博客上的帖子。)

答案 1 :(得分:1)

你是对的。

在Javascript中,a || b评估第一个“truthy”操作数 如果a为“falsy”(例如nullfalseundefined0),则评估为b

答案 2 :(得分:0)

运算符||会为您提供第一个未评估为conditionall false的值(如0null )。

这意味着使用0 || null || 5会产生5个结果。

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

var x = something || default_value;

更具可读性
var x = (something ? something : default_value);

答案 3 :(得分:0)

var x = color[idx] || [];

如果color是具有名称为String(idx)的属性并且该属性的值为真实的对象,请将该属性的值指定给x。否则,让x为空数组。

答案 4 :(得分:0)

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

var booleanValue = someFunction() || otherFunction()

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

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

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