这段代码意味着什么([1,2,3] || 0)[0]

时间:2014-02-21 15:33:10

标签: javascript

Closure(Script) implementation in JavaScript called "wisp"有这个片段:

(get [1 2 3] 1) ; => ([1, 2, 3] || 0)[0]

这意味着wisp代码在JavaScript中编译为:

([1, 2, 3] || 0)[0]

但为什么|| 0在那里?

3 个答案:

答案 0 :(得分:5)

我的猜测是,你可以发送一个变量:

,而不是写一个文字数组
(get x 1) ;

因此,如果|| 0xnull,则使用undefined

在JavaScript中,||不返回布尔值,如果它是“truthy”则返回第1个值,如果第1个值是“falsy”则返回第2个值。

0[0]就像undefined一样返回[][0]0[]少一个字符,因此这可能是|| 0代替|| []的原因。

答案 1 :(得分:2)

通常,如果第一部分为null / undefined / false,它将用于指定默认值。

例如,请考虑以下代码:

var a = 1;
var b;

var x = a || 0;//if a is true use a, otherwise use 0
var y = b || 0;//if b is true use b, otherwise use 0

x的值为1,因为1是一个真值,因此成为使用的值。而y将为0,因为b的值未定义(假值),因此使用0代替。

在你的例子中,它是毫无意义的,因为[1, 2, 3]将永远是真的。但是,如果您使用的是变量,则可能无法分配变量,因此将应用默认值。

Here is an example显示了不同类型的应用方式

Here is more information on Truthy and Falsey vaues

答案 2 :(得分:1)

我不相信|| 0会做任何事情。 ||运算符检查null,undefined等,如果找到则返回表达式的右侧。

在此示例中,[1, 2, 3]永远不会为空,因此永远不会返回0