在javascript中,当使用具有多个条件的if语句进行测试时,javascript是否会对它们进行全部测试,或者在测试它们之前是否会保释,如果它已经是假的?
例如:
a = 1
b = 2
c = 1
if (a==1 && b==1 && c==1)
Run Code Online (Sandbox Code Playgroud)
将javascript测试所有这3个条件,或者在看到b不等于1之后,因此是假的,它会退出语句吗?
我从表演的角度问道.例如,如果我正在测试3个复杂的jQuery选择器,我宁愿不让jQuery遍历DOM 3次,如果它通过第一个显然会返回FALSE.(在这种情况下,嵌套3 if语句更有意义).
附录:更多的好奇心,这个的正确用语是什么?我注意到你们很多人都使用"短路"一词.还有,有些语言会这样做而其他语言不这样做吗?
Ano*_*on. 139
该&&运营商"短路" -也就是说,如果左边的条件是假的,它不打扰评估是正确的.
类似地,||如果左条件为真,则操作员短路.
编辑:虽然,在你进行基准测试并确定这是一个问题之前,你不应该担心性能.过早的微观优化是可维护性的祸根.
Bra*_*rad 13
从性能角度来看,这不是微优化.
如果我们有3个布尔变量,a,b,c是微优化.
如果我们调用返回布尔变量的3个函数,则每个函数可能需要很长时间,而且不仅要知道这个短路,还要知道它的顺序.例如:
if(takesSeconds()&& takeMinutes())
好多了
if(takesMinutes()&& takeSeconds())
如果两者同样可能返回假.
小智 10
这就是你可以用javascript代码做的原因
var x = x || 2;
Run Code Online (Sandbox Code Playgroud)
这意味着如果x未定义或者为"false",则默认值为2.
ivc*_*ela 10
如果有人在想,如果有一种方法来强制评估的所有条件,在某些情况下,位运算符&和|可用于
var testOr = true | alert(""); //alert pops up
var testAnd = false & alert(""); //alert pops up
Run Code Online (Sandbox Code Playgroud)
应使用这些真的很用心,因为位运算符是对他们的操作数的单位,并且不能总是作为"非短路"版本,算术运算符&&和||
例:
-2147483648 && 1 = 1
Run Code Online (Sandbox Code Playgroud)
但
-2147483648 & 1 = 0
Run Code Online (Sandbox Code Playgroud)
希望它能帮助到达这里寻找类似信息的人(像我一样)并感谢@Max进行更正和反例
它只会测试所有条件,如果第一个条件为真,请自行测试:
javascript: alert (false && alert("A") && false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83985 次 |
| 最近记录: |