作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一直以来我对短路评估的想法似乎都是错误的。
在 JavaScript 中:
var a = false, b = true, c=true;
a && b || c; // Evaluates to true
相比于
var a = false, b = true, c=true;
a && (b || c); // Evaluates to true
为什么 VM 在看到 a
为 false 时不停止?
更明确的例子:
function a(){
console.log("I'm A");
return false;
}
function b(){
console.log("I'm B");
return true;
}
function c(){
console.log("I'm C");
return true;
}
a() && b() || c();
输出是:
I'm A
I'm C
true
显然
a && b || c === (a && b) || c
所以我很困惑,为什么它会自动将 a && b 包装在一起?这些表达式的运算顺序究竟是什么?
大多数语言都遵守这个顺序吗(PHP好像也是这样)?
最佳答案
这些简单的规则适用:
- 逻辑表达式评估中的快捷方式并不意味着表达式被错误地评估,即结果与或没有快捷方式相同;
- AND boolean 运算符 (&&) 的优先级高于 OR (||)。这就是为什么 a && b 被“包裹”在一起的原因;
-依赖优先顺序是不安全的,使用括号 ;这也提高了可读性;
-如果结果已经定义,大多数语言在评估逻辑表达式时都会使用快捷方式,包括。 PHP;也有异常(exception),但最显着的是逆波兰符号语言,如 PostScript。
关于javascript - 短路评估令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751692/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!