2012-07-23 148 views
12

可以告诉我为什么下面的代码在JavaScript中返回true?为什么(true> null)在JavaScript中总是返回true?

console.log(true > null); //returns true 
+14

是的,因为null是伪造表达式(然后* false *),比较运算符会将其转换为_number_(然后为true = 1和false = 0)。 – 2012-07-23 14:41:30

+2

** @阿德里亚诺**发布它的答案就是这样! – elclanrs 2012-07-23 14:42:11

+0

http://stackoverflow.com/questions/801032/null-object-in-javascript – diEcho 2012-07-23 14:42:20

回答

13

null是像在这种情况下false,至极是0为数字。 true1作为一个数字。

10大(>)。

+0

感谢您的回答。我想知道为什么是null === 0 false?然后我意识到它需要被强制。所以对于那些需要绝对证明的人来说,尝试+ null === 0,其结果为真,证明null确实被强制为0.只是认为这可能有助于其他人。 – GrantVS 2013-10-15 11:16:54

2

可能是因为true = 1其中null = 0

7

它们被转换成数字,null0true1

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

如果情况并非如此,这两个类型(PX)是字符串,并且 类型(py)是字符串,然后

  1. NX是调用ToNumber(PX)的结果。因为pxpy 是原始值评估顺序并不重要。
  2. ny是调用ToNumber(py)的结果。
Number(null) //0 
Number(true) //1 
0

的代码不正确,你需要做的:

console.log(true > typeof null); 
+1

你为什么认为这是不正确的? – Esailija 2012-07-23 15:19:39

2

的JavaScript做了很多类型强制的背景和大量的结果,你会发现AREN” t很有用(见http://wtfjs.com/)。

在这种情况下,被强制为1的真值大于被强制为0的空值。由于1大于0,结果为真。

如果操作数中的一个是布尔值,布尔操作数转换为 1,如果它是真实的,0,如果它是假的。

MDN

0

比较运算符“>”强制它的左侧和右侧转换为数字。 Number(true)是1,Number(null)是0,所以paitance中的内容被取为“1> 0”,结果总是为真。

1

后面发生的事情是关系运算符(在这种情况下为>)在执行比较之前执行类型强制转换。在执行ToPrimitive时,true被强制为1,null为0。 您可以在此处查看操作员实际工作方式的详细信息here

相关问题