在 Javascript 中 precedence strict equal
(10) 大于 logical and
(6) 那么这段代码是如何工作的
var a;
console.log("value of a is", a);
if (a && a.test === "test") {}
它不应该抛出错误吗
cannot read test of undefined.
而且member access
的伤口优先级比它们都高(19)。
我错过了什么?
最佳答案
一些编程语言,如 JavaScript,会延迟计算逻辑表达式。这意味着如果表达式的第一部分 (a
) 为假,解释器甚至认为没有理由执行第二部分 (a.test === "test"
),因此不会抛出任何错误。
需要澄清的是,优先级并未定义表达式执行的实际顺序,仅定义了有效顺序。因此,member access
运算符具有最高优先级并不意味着它将首先执行。解释器仍然可以首先评估 a
,而不影响任何更高优先级运算符的结果。您可以将优先级视为隐式括号,如果您将表达式写为 (a) && ((a.test) === "test")
您可以清楚地看到 a
可以而且将首先被计算,因为它位于表达式的最左边。
关于javascript - 为什么 "and"在 "equal"之前评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44964246/