【发布时间】:2019-11-15 18:32:34
【问题描述】:
括号的优先级高于相等。
所以根据我的理解,优先级越高。
现在假设我比较了未定义的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)
}
应按此顺序评估:
- (typeof a !== 'undefined' && (a == 1))
- (a == 1)
- 类型
- 结果来自 (3) !== 'undefined'
- “(4) 的结果” && “(2) 的结果”
但是如果 a 没有定义但它没有定义,这通常会抛出异常。
为什么等式左边的优先级较低,但首先计算它?
编辑:我改编了 '||' 中的示例到&& 只是因为|| 总是会抛出。
【问题讨论】:
-
Parens 不添加“权重”,它们将通常不会的操作组合在一起:
a || b && c || dvs(a || b) && (c || d) -
您从哪里获得优先级的值?如果语句字面上从左到右,比较结果(无论类型如何)。
-
在小学算术课上,他们将运算符优先级和评估顺序的概念混为一谈——在
3 + 4 - (5 + 6)之类的东西中,他们告诉你先计算5 + 6,然后再计算3 + 4 - 11——这很好,因为只要您尊重运算符优先级,求值顺序在算术中并不重要。但是在编程中,计算顺序通常确实很重要(因为表达式可能有副作用),您需要将这些概念分开;尊重运算符优先级是不够的。 -
好的 - 这只会影响
if语句从左到右运行之前的计算。if (2 + 3 * 4 == 3 * 2 + 1)将正确计算if (14 == 7)但它只是一个if语句。从左到右 - 总是。
标签: javascript node.js