很抱歉,如果这个问题达不到网站的水平,我就无法在其他任何地方找到帮助。我刚刚开始学习JavaScript,但我仍然坚持使用我的教科书中给出的示例代码
var a = null;
function b() {return "B";}
(a || b)();
! "B"
对于代码没有给出足够的解释,我无法弄清楚它是如何工作的,任何人都可以帮助我
由于
阿卡什
答案 0 :(得分:2)
关键在于||
运算符的工作原理。这一行:
(a || b)();
相当于:
var f;
if (a)
f = a;
else
f = b;
f();
||
运算符首先评估左侧(在本例中为a
)。然后检查该值是否为“truthy”,这意味着它不是null
,0
,空字符串,还有其他一些东西。在这种情况下,它显然是null
,所以它不是“真实的”。
因此,||
运算符继续评估右侧(在本例中为b
),并将该值作为||
运算的结果。什么是“b”?这是在调用时返回字符串"B"
的小函数。
因此,在||
操作完成后,您将留下对该函数的引用,随后的()
函数调用操作符将调用该函数。
答案 1 :(得分:2)
我认为你混淆的根源来自第三和第四行。
让我们从第三行开始:(a || b)();
。
评估第一个a
,如果不是null
或undefined
,则此表达式的结果为a()
,否则结果为b()
。
在您的代码段中,a
为空,因此表达式将计算为b()
,只返回"B"
。
OR ||
运算符逐个查看其操作数,直到找到 truthy 的值并返回它,如果所有值都是 falsy 然后返回最后一个操作数。
有关 truthy 和 falsy 值的更多信息,check here
现在这一行! "B"
,JavaScript中的所有字符串都被评估为true
,但空字符串""
除外,因此前一个表达式的结果是! true
所以它是false
。
答案 2 :(得分:1)
有两个变量,a
是null
和b
,它是一个始终返回字符串"B"
的函数。 (a || b)()
展示了一点逻辑和&&和||在JavaScript中工作 - 评估为short-circuited,评估的最后一个值是整个表达式的值。由于a
null
是假的,(a || b)()
评估为b()
,因此您获得"B"
打印。
一般来说:
(a || b); //a if a is truthy, otherwise b
(a && b); //a if a is falsy, otherwise b
Falsy值为null
,undefined
,0
,空字符串""
,NaN
,当然还有false
。其他一切都是真的。