在javascript中,当使用带有多个条件的if语句进行测试时,javascript是否会不管怎样地全部测试它们,或者如果已经为false,它会在测试它们之前停止吗?
例如:
a = 1
b = 2
c = 1
if (a==1 && b==1 && c==1)
javascript是否会测试所有3个条件,或者在看到b不等于1并因此为false后,它会退出语句吗?
我从性能的角度来问。例如,如果我正在测试3个复杂的jQuery选择器,我不希望让jQuery遍历DOM 3次,如果通过第一个很明显,它将返回FALSE。(在这种情况下,嵌套3个if语句会更有意义)。
附录:更多的是好奇,这是什么合适的术语?我注意到你们中的许多人使用“短路”这个术语。另外,是不是有些语言可以做到这一点,而另一些语言则不能呢?
发布于 2009-12-19 04:28:33
&&
操作符“短路”--也就是说,如果左边的条件是假的,它就不会费心计算右边的条件。
类似地,如果左条件为真,则||
操作符短路。
编辑:不过,在您对性能进行基准测试并确定这是一个问题之前,您不应该担心性能。过早的微优化是可维护性的祸根。
发布于 2009-12-19 05:21:16
从性能的角度来看,这不是微优化。
如果我们有3个布尔变量,a,b,c,那就是微优化。
如果我们调用3个返回布尔变量的函数,每个函数可能会花费很长时间,而且不仅要知道这种短路,而且要知道这种短路的顺序。例如:
if (takesSeconds() && takesMinutes())
远好于
if (takesMinutes() && takesSeconds())
如果两者都同样有可能返回false。
发布于 2009-12-19 04:32:56
这就是为什么你可以在javascript代码中这样做的原因
var x = x || 2;
这将意味着如果x是未定义的或否则为'false‘,则缺省值为2。
https://stackoverflow.com/questions/1930499
复制相似问题