为了账号安全,请及时绑定邮箱和手机立即绑定

什么是“x&foo()”?

什么是“x&foo()”?

蓝山帝景 2019-07-17 16:41:12
什么是“x&foo()”?我看到某地其他人说,x && foo();等于if(x){     foo();}我测试过了,他们也做了同样的事情。但为什么?究竟什么是x && foo()?
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

AND和OR运算符都可以快捷。

所以&&只有当第一个表达式是真的时,才尝试第二个表达式(更具体地说,类似真理)。第二个操作所做的事情(不管它的内容是什么)foo())不重要,因为它没有被执行除非第一个表达式的计算结果是真实的。如果它是真实的,那么将要被执行,以便尝试第二个测试。

相反,如果||语句是正确的,第二个语句不会被触及。这是因为整个语句已经可以计算,无论第二个表达式的结果如何,该语句都将导致true,因此它将被忽略并保持未执行。

当然,在使用这样的快捷键时,需要注意的情况是,在操作符中,定义的变量仍然可以计算为不正确的值(例如:0),和真实的(例如。'zero').


查看完整回答
反对 回复 2019-07-17
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

这被称为短路评估.

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


查看完整回答
反对 回复 2019-07-17
?
慕慕森

TA贡献1856条经验 获得超17个赞

不是完全等同的。第一个表达式具有可以使用的返回值;第二个表达式是语句。

如果您不感兴趣的返回值(即,信息,无论两者xfoo()),它们是等价的,但通常,只有当您想要将其用作布尔表达式时,才应该使用布尔逻辑版本,例如:

if (x && foo()) {
    do_stuff();}

如果你只对跑步感兴趣foo()有条件地(当x是真实的),第二种形式是首选的,因为它更清楚地表达了意图。

人们可能更喜欢布尔逻辑版本的一个原因可能是javascript受到了一个不寻常的限制:源代码大小(更详细的源代码意味着更多的带宽使用);由于布尔逻辑版本使用的字符较少,所以它具有更高的带宽效率。大多数情况下,我仍然更喜欢使用更详细的版本,除非这个脚本经常被使用-对于jQuery这样的库来说,使用这样的优化是完全合理的,但在大多数其他情况下并非如此。


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 524 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信