有人可以告诉我为什么以下代码在JavaScript中返回true?
console.log(true > null); //returns true
答案 0 :(得分:13)
null
与false
类似,0
为数字。 true
是1
的数字。
1
比>
更大(0
)。
答案 1 :(得分:7)
它们被转换为数字,null
提供0
而true
提供1
http://ecma-international.org/ecma-262/5.1/#sec-11.8.5
如果不是Type( px )都是String和 类型( py )是String,然后是
- 让 nx 成为调用ToNumber( px )的结果。因为 px 和 py 是原始价值评估顺序并不重要。
- 让 ny 成为调用ToNumber( py )的结果。
醇>
Number(null) //0
Number(true) //1
答案 2 :(得分:2)
可能是因为true = 1
null = 0
答案 3 :(得分:2)
JavaScript在后台执行了很多类型强制,你会发现很多结果都没用(参见http://wtfjs.com/)。
在这种情况下,被强制为1的true大于被强制为0的null。因为1大于0,结果为真。
如果其中一个操作数是布尔值,则将布尔操作数转换为 如果为真则为1,如果为假则为+0。
来自MDN。
答案 4 :(得分:1)
背后发生的是关系运算符(在这种情况下为>
)在进行比较之前执行类型强制。执行ToPrimitive
时,true被强制转换为1,null为0。
您可以在此处查看运营商实际工作方式的详细信息here
答案 5 :(得分:0)
代码不正确,您需要这样做:
console.log(true > typeof null);
答案 6 :(得分:0)
比较运算符“>”迫使它的左侧和右侧转换为数字。 Number(true)为1,Number(null)为0,因此paranthesis中的内容被视为“1> 0”,结果始终为true。