这个JavaScript程序如何工作?

时间:2013-11-17 14:48:04

标签: javascript

很抱歉,如果这个问题达不到网站的水平,我就无法在其他任何地方找到帮助。我刚刚开始学习JavaScript,但我仍然坚持使用我的教科书中给出的示例代码

var a = null;
function b() {return "B";}
(a || b)();
! "B"

对于代码没有给出足够的解释,我无法弄清楚它是如何工作的,任何人都可以帮助我

由于

阿卡什

3 个答案:

答案 0 :(得分:2)

关键在于||运算符的工作原理。这一行:

(a || b)();

相当于:

var f;
if (a)
  f = a;
else
  f = b;
f();

||运算符首先评估左侧(在本例中为a)。然后检查该值是否为“truthy”,这意味着它不是null0,空字符串,还有其他一些东西。在这种情况下,它显然是null,所以它不是“真实的”。

因此,||运算符继续评估右侧(在本例中为b),并将该值作为||运算的结果。什么是“b”?这是在调用时返回字符串"B"的小函数。

因此,在||操作完成后,您将留下对该函数的引用,随后的()函数调用操作符将调用该函数。

答案 1 :(得分:2)

我认为你混淆的根源来自第三和第四行。

让我们从第三行开始:(a || b)();

评估第一个a,如果不是nullundefined,则此表达式的结果为a(),否则结果为b()

在您的代码段中,a为空,因此表达式将计算为b(),只返回"B"

OR ||运算符逐个查看其操作数,直到找到 truthy 的值并返回它,如果所有值都是 falsy 然后返回最后一个操作数。

有关 truthy falsy 值的更多信息,check here

现在这一行! "B",JavaScript中的所有字符串都被评估为true,但空字符串""除外,因此前一个表达式的结果是! true所以它是false

答案 2 :(得分:1)

有两个变量,anullb,它是一个始终返回字符串"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值为nullundefined0,空字符串""NaN,当然还有false。其他一切都是真的。

相关问题