具有多个条件的javascript if语句是否测试所有这些条件?

2022-08-30 05:24:11

在javascript中,当使用具有多个条件进行测试的if语句时,javascript是否无论如何都会测试它们,或者如果它已经是假的,它会在测试它们之前进行保释?

例如:

 a = 1
 b = 2
 c = 1

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

javascript会测试所有3个条件,还是在看到b不等于1,因此是假的之后,它会退出语句吗?

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

附录:更多的是好奇,这是什么合适的术语?我注意到你们中的许多人使用“短路”一词。另外,有些语言这样做,而其他语言不这样做吗?


答案 1

运算符“短路” - 也就是说,如果左侧条件为假,则不会费心评估正确的条件。&&

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

编辑:不过,在你进行基准测试并确定这是一个问题之前,你不应该担心性能。过早的微优化是可维护性的祸根。


答案 2

从性能的角度来看,这不是微优化。

如果我们有3个布尔变量,a,b,c,那就是微优化。

如果我们调用 3 个返回布尔变量的函数,每个函数可能需要很长时间,不仅知道这个短路很重要,而且知道顺序也很重要。例如:

if (takesSeconds() && takesMinutes())

比好多了

if (takesMinutes() && takesSeconds())

如果两者都同样可能返回 false。