【问题标题】:Javascript conditional order evaluationJavascript条件订单评估
【发布时间】:2011-05-05 01:36:15
【问题描述】:

当表达式中的一个条件为假时,我能否指望 Javascript 立即失败?

f = {'a':'b'};
if (f.a !== undefined || f.a === 'b') {
  // Is this OK to use, because the second condition will never be evaluated?
}

【问题讨论】:

  • 从我在代码中看到的情况来看,您的第二个条件总是被评估,因为 (f.a!==undefined) 等于 true。
  • 如果第一个条件评估为假,则将评估第二个条件。

标签: javascript


【解决方案1】:

是的,这被称为short circuit evaluation

使用AND 逻辑运算符,如果第一个计算结果为false,则永远不会计算第二个,因为条件已经知道足够多。

使用OR 逻辑运算符,如果第一个是false,它将评估第二个。否则,如果第一个是 true,它将不会评估第二个(不需要)。

这也是你看到的原因......

var a = function(b) {
   b = b || 7;
}

【讨论】:

  • b = b || 7; 表单通常用作在 b 未定义时为 b 未定义时提供默认值的速记方式,基于未定义评估为 false,但 这实际上不起作用 考虑到 b 可以包含其他几个也都评估为 false 的值(0、null、空字符串,当然 false 都评估为 false)。当然,如果您确信所有这些其他值都应该被默认值覆盖,那没关系...
  • @nnnnn 并不完美,但很多时候,它非常有用。
  • 我认为正确的方法是b = typeof b == "undefined"?7:b;
  • @JVE999 是的,如果您必须确定不能以一种方式处理所有 falsey 值,这是一种方法。
  • @JVE999 实际上我想说typeof 在那里是不必要的,因为您已经定义了b,所以该变量不可能不存在。所以你可以只做== null 并让它检查null undefined(在这种检查中它们通常是平等的)。
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2020-11-16
  • 2017-12-18
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多