【发布时间】:2023-04-01 12:38:01
【问题描述】:
在JavaScript 和Java 中,等于运算符(== 或===)的优先级高于或运算符(||)。然而两种语言(JS、Java)都支持在if 语句中进行短路:
当我们有if(true || anything()) 时,anything() 不会被评估。
您还可以使用以下表达式:true || foo == getValue()) - 例如在 console.log(...); 等输出语句或赋值中。
现在,根据运算符优先级,不应该发生短路,因为在优先级方面=== = == > ||。 (换句话说,应该首先进行比较,应该调用getValue(),因为相等性检查的优先级高于OR比较。)但确实如此。 getValue() 未被调用(可以通过将输出语句放入其主体中轻松检查)。
为什么(当运算符优先级表明不应该短路时,短路会起作用)?
还是我把事情搞糊涂了?
【问题讨论】:
-
你的问题有矛盾。你说“......应该首先进行比较...... getValue() 应该被调用......但它确实如此。”所以你的问题的一部分暗示
getValue()没有被调用,但是这个语句说是 is 被调用。是哪个? -
@Chloe:他的 “但确实如此” 指的是 “不应该发生短路”,这与他对 "
getValue()应该被称为..." 并且他观察到 "getValue()不被称为"。
标签: javascript java operator-precedence short-circuiting