什么是“x&foo()”?

什么是“x&foo()”?

我看到某地其他人说,

x && foo();

等于

if(x){
    foo();}

我测试过了,他们也做了同样的事情。
但为什么?究竟什么是x && foo()?


蓝山帝景
浏览 525回答 3
3回答

慕尼黑8549860

AND和OR运算符都可以快捷。所以&&只有当第一个表达式是真的时,才尝试第二个表达式(更具体地说,类似真理)。第二个操作所做的事情(不管它的内容是什么)foo())不重要,因为它没有被执行除非第一个表达式的计算结果是真实的。如果它是真实的,那么将要被执行,以便尝试第二个测试。相反,如果||语句是正确的,第二个语句不会被触及。这是因为整个语句已经可以计算,无论第二个表达式的结果如何,该语句都将导致true,因此它将被忽略并保持未执行。当然,在使用这样的快捷键时,需要注意的情况是,在操作符中,定义的变量仍然可以计算为不正确的值(例如:0),和真实的(例如。'zero').

慕妹3242003

这被称为短路评估.在这种情况下,如果x是假的,那么foo()不需要进行评估(结果是&&将永远是错误的);如果x是True,它确实需要被评估(即使结果被丢弃)。

慕慕森

不是完全等同的。第一个表达式具有可以使用的返回值;第二个表达式是语句。如果您不感兴趣的返回值(即,信息,无论两者x和foo()),它们是等价的,但通常,只有当您想要将其用作布尔表达式时,才应该使用布尔逻辑版本,例如:if (x && foo()) {     do_stuff();}如果你只对跑步感兴趣foo()有条件地(当x是真实的),第二种形式是首选的,因为它更清楚地表达了意图。人们可能更喜欢布尔逻辑版本的一个原因可能是javascript受到了一个不寻常的限制:源代码大小(更详细的源代码意味着更多的带宽使用);由于布尔逻辑版本使用的字符较少,所以它具有更高的带宽效率。大多数情况下,我仍然更喜欢使用更详细的版本,除非这个脚本经常被使用-对于jQuery这样的库来说,使用这样的优化是完全合理的,但在大多数其他情况下并非如此。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript