这个JavaScript程序是如何工作的
How does this JavaScript program works?
抱歉,如果这个问题不符合网站的水平,我无法在其他任何地方找到帮助。我刚刚开始学习JavaScript,但我被困在我的教科书中给出的示例代码上
var a = null;
function b() {return "B";}
(a || b)();
! "B"
对代码没有足够的解释,我无法弄清楚它是如何工作的,任何人都可以帮助我吗
谢谢
阿卡什
我假设你困惑的根源来自第三行和第四行。
让我们从第三行开始:(a || b)();
.
首先计算a
,如果不是null
或undefined
则此表达式的结果是a()
,否则结果是b()
。
在您的代码片段中,a
为 null,因此表达式的计算结果为 b()
仅返回 "B"
。
OR ||
运算符逐个查看其操作数,直到找到一个 true 值并返回它,如果所有值都是假的,则返回最后一个操作数。
有关真值和假值的更多信息,请查看此处
现在这一行! "B"
,JavaScript 中除了空字符串""
之外的所有字符串都被求值true
,所以前面表达式的结果是! true
所以是false
。
关键在于||
运算符的工作方式。 这一行:
(a || b)();
相当于这个:
var f;
if (a)
f = a;
else
f = b;
f();
||
运算符通过首先评估左侧(在本例中为 a
)来工作。 然后,它会检查该值是否为"真实",这意味着它不是null
、0
、空字符串和其他一些东西。在这种情况下,它显然是null
,所以它不是"真实的"。
因此,||
运算符继续计算右侧(在本例中为 b
),并将该值作为||
运算的结果。什么是"b"? 这是一个在调用时返回字符串"B"
的小函数。
因此,在||
操作完成后,将留下对该函数的引用,后续的()
函数调用运算符会导致调用该函数。
变量,a
是null
变量,b
变量是始终返回字符串"B"
的函数。 (a || b)()
展示了一些逻辑 && 和 ||在 JavaScript 中工作 - 计算短路,最后一个评估值是整个表达式的值。由于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
。其他一切都是真实的。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- 在JavaScript中的类中,push和concat的工作方式有何不同
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)