javascript if语句是否有多个条件testing它们?

在javascript中,当使用if语句来testing多个条件时,javascript是否全部testing它们,还是在testing它们之前保留它们,如果它已经是错误的呢?

例如:

a = 1 b = 2 c = 1 if (a==1 && b==1 && c==1) 

请问javascript会testing所有这三个条件,或者在看到b不等于1的情况下,因此是false,它会退出语句吗?

我从性能angular度来问。 例如,如果我正在testing3个复杂的jQueryselect器,我宁愿没有jQuery遍历DOM 3次,如果它明显通过第一个将返回FALSE。 (在这种情况下,嵌套3个if语句会更有意义)。

附录:更多的好奇心,这是什么适当的术语? 我注意到很多人使用术语“短路”。 另外,做一些语言做这个和别人不?

&&运算符“短路” – 也就是说,如果左边的条件是错误的,那么它就不会评估正确的条件。

同样, || 如果左侧条件为真,则操作员短路。

编辑:虽然,你不应该担心性能,直到你基准,并确定这是一个问题。 过早的微观优化是可维护性的祸根。

从性能angular度来看,这不是一个微观优化。

如果我们有3个布尔variables,a,b,c是一个微优化。

如果我们调用返回布尔variables的3个函数,每个函数可能需要很长时间,不仅对于了解这个短路,而且以何种顺序知道这一点很重要。 例如:

if(takesSeconds()&& takesMinutes())

比…更好

if(takesMinutes()&& takesSeconds())

如果两者都有可能返回错误。

这就是为什么你可以在JavaScript代码中做的

 var x = x || 2; 

这意味着如果x是未定义的或者是“假”的,那么默认值是2。

如果有人想知道是否有办法强制所有条件的评估在某些情况下 ,按位运算符&| 可以使用

 var testOr = true | alert(""); //alert pops up var testAnd = false & alert(""); //alert pops up 

这些应该是非常小心的,因为按位运算符是算术运算符,它们在它们的操作数的单个位上工作,并且不能总是作为&&||非“短路”版本。

例:

 -2147483648 && 1 = 1 

 -2147483648 & 1 = 0 

希望它能帮助到达这里的人寻找这样的信息(像我一样),感谢@Max的纠正和反例

它只会testing所有的条件,如果第一个是真的,为自己testing:

 javascript: alert (false && alert("A") && false); 

它短路 – 只有a和b将在你的例子中进行比较。

看到b不等于1后退出。

停止使用1个或多个参数向左评估的另一个原因。

if(response.authResponse &&(response.authResponse.accessToken!= user.accessToken)){…}

第二个评估依赖于第一个是真实的,如果response.authResponse为null或未定义等,则不会抛出编译错误,因为第一个条件失败。

其他语言在早期就有这个问题,我认为现在编译器是一种标准的方法。

对于这个问题的任何人都困惑,因为他们没有看到使用||时的短路行为 与一个? 运营商如此:

x = 1 || true ? 2 : 3 // value of x will be 2, rather than 1 as expected

似乎短路规则不起作用。 为什么要评估||的第二项 (真实的2:3)第一个是真的吗? 原来是一个操作顺序问题,因为上面是等价的

x = (1 || true) ? 2 : 3

|| 首先评估和? 第二次评估。 你可能想要的是:

x = 1 || (true ? 2 : 3)