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
在那里?
答案 0 :(得分:5)
我的猜测是,你可以发送一个变量:
,而不是写一个文字数组(get x 1) ;
因此,如果|| 0
为x
或null
,则使用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显示了不同类型的应用方式
答案 2 :(得分:1)
我不相信|| 0
会做任何事情。 ||
运算符检查null,undefined等,如果找到则返回表达式的右侧。
在此示例中,[1, 2, 3]
永远不会为空,因此永远不会返回0
。