在JavaScript中,if是否与多个或';让我们在继续之前评估所有语句?

在JavaScript中,if是否与多个或';让我们在继续之前评估所有语句?,javascript,performance,conditional-statements,Javascript,Performance,Conditional Statements,在Javascript中,特别是在Google的V8引擎中,在确定if比较的最终结果之前,在or条件“| |”的列表中编写多个函数调用是否执行所有函数 e、 g 所以我想问:这与†条件的工作原理相似,但恰恰相反吗?计算为TRUE的第一个条件是否会导致跳过其余条件并执行成功逻辑 我找不到我正在寻找的任何文档中说明了这一点。这并不是说这会有很大的不同,但是我很好奇这到底是如何执行的 †(与And“&&”类似,我的意思是,第一个条件求值为FALSE将停止其余条件的执行,并继续执行以下其他条件。)你说得

在Javascript中,特别是在Google的V8引擎中,在确定if比较的最终结果之前,在or条件“| |”的列表中编写多个函数调用是否执行所有函数

e、 g

所以我想问:这与†条件的工作原理相似,但恰恰相反吗?计算为TRUE的第一个条件是否会导致跳过其余条件并执行成功逻辑

我找不到我正在寻找的任何文档中说明了这一点。这并不是说这会有很大的不同,但是我很好奇这到底是如何执行的


†(与And“&&”类似,我的意思是,第一个条件求值为FALSE将停止其余条件的执行,并继续执行以下其他条件。)

你说得对。这叫做短路评估,它同时适用于
|
&&

对于
| |
,只有当左侧的计算结果为false时,才会对右侧进行计算

对于
&&
,只有当左侧的计算结果为true时,才会对右侧进行计算


请注意,这不仅仅是为了性能。它还可以防止错误的发生:如果左手侧不符合预期,有时评估右手侧将是不安全的或没有意义的。

是的,
|
短路,就像
和&
一样。但是,在这种特殊情况下,最好使用一个正则表达式:
if(path.match(/\。(sql | xml…等)
证明这一点的一个好方法是创建一个总是返回true的函数和另一个总是返回false的函数,然后按不同顺序调用它们进行测试。示例:这正如我所预期的。C#和Java可以做到这一点,我想javascript也可以。谢谢。
var path = 'C:\\MyFiles\\file.doc';
if (   path.match(/\.docx?/gi)
    || path.match(/\.xlsx?/gi)
    || path.match(/\.xml/gi)
    || path.match(/\.sql?/gi)) {

    // Success
} else {
    // Failed
}