javascript - 为什么 "and"在 "equal"之前评估

标签 javascript operator-precedence

在 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/

相关文章:

perl - 在 Perl 中报告错误时应该使用 '||' 或更低的优先级 'or' 吗?

c - '->' 的无效类型参数(有 'int' )

javascript - 窗口滚动只调用一次 JS 函数

javascript - 使用带点符号的整数键访问 javascript 对象中的属性

c - 需要解释输出

c - 为什么这些构造使用前后递增的未定义行为?

javascript - jQuery 库有冲突

javascript - 图像重新加载仅在 Firefox 中导致闪烁

javascript - 关于 Javascript 'then' 行为的困惑

sql - 在 PostgreSQL 中分组 AND 和 OR 条件