我有点困惑!为什么口供不会影响这些陈述的优先级?为什么括号不会在JavaScript中更改==和===的运算符优先级?
true === '0' == 0 // returns true
(true === '0') == 0 // returns true again!
我有点困惑!为什么口供不会影响这些陈述的优先级?为什么括号不会在JavaScript中更改==和===的运算符优先级?
true === '0' == 0 // returns true
(true === '0') == 0 // returns true again!
这不是优先级是不同的,这是两个分组评价为真:
true === '0'
是false
false == 0
是true
'0' == 0
是true
true === true
是true
你可能想要查看JS truth table
因为(true === '0')
是假的,false == 0
在这两种情况下都是这样。
换句话说:
(true === '0') == 0
解析
false == 0
这是真的。
由于运营商===
和==
有same precedence是从左到右关联。这两个表达式导致相同的解释。考虑以下表达式,为什么结果是它是什么:
true === '0' // false
// so: true === '0' == 0 is false == 0 and;
// (true === '0') == 0 is (false) == 0 is false == 0 and;
false == 0 // true
快乐的编码。
> true === '0'
false
> false == 0
true
因为true === '0'
计算结果为false
,并且false == 0
是真实的。 (因为false
和0都是“非truthy”)
请记住,===
比较严格相等和==
测试是否与转换相等。
(true === '0') == 0
这一个的计算结果为:
false == 0 // which is true
因为(真=== '0')为假,并且假== 0为真,并在这种情况下JavaScript是NT做了严格的类型比较,如果你希望它第二部分返回false变化===
因为真正===“0”返回false和虚假== 0,则返回true
即使有paranthesis,你的第一个检查总会返回false a nd
false == 0 will always return true
===将检查值是否完全相同(类型包含)。所以,既然你把一个char和一个布尔值进行比较,结果总是是假的。
通过使用括号,您没有改变执行顺序。即使没有括号,也是从左到右。左侧部分true =='0'返回0.
0 == 0返回true,所以最终答案都是正确的。
但它*是*表达*是相同的* - 并吹掉这是一个很大的疏忽。考虑添加'true ===('0'== 0)'来显示实际做某事的括号(这会产生第二种情况)。好的答案,否则。 – 2011-08-22 18:23:06