12

有人能告诉我为什么以下代码在 JavaScript 中返回 true 吗?

console.log(true > null); //returns true
4

7 回答 7

13

null就像false在这种情况下,它是0一个数字。true1一个数字。

1( >) 大于0

于 2012-07-23T14:44:21.013 回答
7

它们被转换为数字,null给予0true给予1

http://ecma-international.org/ecma-262/5.1/#sec-11.8.5

如果 Type( px ) 不是 String 且 Type( py ) 不是 String 的情况,则

  1. nx为调用 ToNumber( px ) 的结果。因为pxpy 是原始值,所以评估顺序并不重要。
  2. ny为调用 ToNumber( py ) 的结果。
Number(null) //0
Number(true) //1
于 2012-07-23T14:44:51.067 回答
2

可能是因为true = 1在哪里null = 0

于 2012-07-23T14:44:41.417 回答
2

JavaScript 在后台做了很多类型强制,你会发现很多结果都没有用(参见http://wtfjs.com/)。

在这种情况下,被强制为 1 的 true 大于被强制为 0 的 null。由于 1 大于 0,因此结果为 true。

如果其中一个操作数是布尔值,则布尔操作数如果为真则转换为 1,如果为假则转换为 +0。

来自MDN

于 2012-07-23T14:45:54.383 回答
1

背后发生的是关系运算符(>在这种情况下)在进行比较之前执行类型强制。执行时ToPrimitive,true 被强制为 1,而 null 被强制为 0。您可以在此处查看运算符实际如何工作的详细信息

于 2012-07-23T14:49:15.690 回答
0

比较运算符“>”强制将其左侧和右侧都转换为数字。Number(true) 为 1,Number(null) 为 0,所以括号中的内容被视为“1>0”,结果始终为 true。

于 2012-07-23T14:48:52.163 回答
0

代码不正确,你需要这样做:

console.log(true > typeof null);
于 2012-07-23T14:45:35.013 回答