有人能告诉我为什么以下代码在 JavaScript 中返回 true 吗?
console.log(true > null); //returns true
null
就像false
在这种情况下,它是0
一个数字。true
是1
一个数字。
1
( >
) 大于0
。
它们被转换为数字,null
给予0
和true
给予1
http://ecma-international.org/ecma-262/5.1/#sec-11.8.5
如果 Type( px ) 不是 String 且 Type( py ) 不是 String 的情况,则
- 令nx为调用 ToNumber( px ) 的结果。因为px和py 是原始值,所以评估顺序并不重要。
- 令ny为调用 ToNumber( py ) 的结果。
Number(null) //0
Number(true) //1
可能是因为true = 1
在哪里null = 0
JavaScript 在后台做了很多类型强制,你会发现很多结果都没有用(参见http://wtfjs.com/)。
在这种情况下,被强制为 1 的 true 大于被强制为 0 的 null。由于 1 大于 0,因此结果为 true。
如果其中一个操作数是布尔值,则布尔操作数如果为真则转换为 1,如果为假则转换为 +0。
来自MDN。
背后发生的是关系运算符(>
在这种情况下)在进行比较之前执行类型强制。执行时ToPrimitive
,true 被强制为 1,而 null 被强制为 0。您可以在此处查看运算符实际如何工作的详细信息。
比较运算符“>”强制将其左侧和右侧都转换为数字。Number(true) 为 1,Number(null) 为 0,所以括号中的内容被视为“1>0”,结果始终为 true。
代码不正确,你需要这样做:
console.log(true > typeof null);