lag*_*lex 7 javascript comparison truthiness
我期待以下比较给出错误:
var A = B = 0;
if(A == B == 0)
console.log(true);
else
console.log(false);
Run Code Online (Sandbox Code Playgroud)
但奇怪的是它会回归false.
更奇怪的是,
console.log((A == B == 1));
Run Code Online (Sandbox Code Playgroud)
回报true.
这种"三元"比较如何运作?
首先,我们需要理解==数字和布尔值之间的比较将导致布尔值的内部类型转换为数字(true变为1和false变为0)
您显示的表达式从左到右进行评估.所以,首先
A == B
Run Code Online (Sandbox Code Playgroud)
进行评价,其结果是true,你是比较true由于具有0 true变得1比较期间,1 == 0计算结果为false.但是当你说的时候
console.log((A == B == 1));
Run Code Online (Sandbox Code Playgroud)
A == B是true,与数字相比,变成了1,你再次将它与1进行比较.这就是它打印的原因true.
像=这样的赋值运算符是右关联的:当有一系列这些运算符具有相同的优先级时,它们从右到左A = B = 0处理,因此被处理为A = (B = 0)(B = 0返回0,因此A和B都以0结尾) .
像==这样的等等运算符是左关联的:从左到右处理相同优先级运算符.A == B == 0被处理为(A == B) == 0,并且因为A == B是真(1),它变为1 == 0假(0).
同样,A == B == 1被处理为(A == B) == 1,变为1 == 1,这是真的(1).
来源和更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
| 归档时间: |
|
| 查看次数: |
4091 次 |
| 最近记录: |