子句括号和等式的先后顺序

时间:2019-07-05 06:35:51

标签: javascript node.js

肢体感觉优先于平等。

因此,据我了解,优先级较高的是首先评估的。

现在让我们比较未定义的a

if (a == 1) { .. // throws an exception because a is not defined

实际案例:

if (typeof a !== 'undefined' && (a == 1)) {
  console.log(1)
} else {  
  console.log(2)
}

应按以下顺序进行评估:

  1. (typeof a!=='undefined'&&(a == 1))
  2. (a == 1)
  3. 类型
  4. 来自(3)的结果!=='undefined'
  5. “来自(4)的结果”和&&“来自(2)的结果”

但是,如果未定义a但未定义,通常会引发异常。

为什么方程式的左侧优先级较低,但为什么会首先对其求值?

编辑:我改写了'||'中的示例到&&只是因为||总是会抛出。

1 个答案:

答案 0 :(得分:1)

||被评估为left-to-right

  

5逻辑或从左到右…|| …

因此,首先被求值的内部表达式是typeof a,是typeof a !== 'undefined'的一部分。

如果||的右侧包含更多嵌套在括号中的表达式,而不论其运算符的优先级如何,则仅在对||的左侧进行求值后才对它们进行求值