可以告诉我为什么下面的代码在JavaScript中返回true?为什么(true> null)在JavaScript中总是返回true?
console.log(true > null); //returns true
可以告诉我为什么下面的代码在JavaScript中返回true?为什么(true> null)在JavaScript中总是返回true?
console.log(true > null); //returns true
null
是像在这种情况下false
,至极是0
为数字。 true
是1
作为一个数字。
1
比0
大(>
)。
感谢您的回答。我想知道为什么是null === 0 false?然后我意识到它需要被强制。所以对于那些需要绝对证明的人来说,尝试+ null === 0,其结果为真,证明null确实被强制为0.只是认为这可能有助于其他人。 – GrantVS 2013-10-15 11:16:54
可能是因为true = 1
其中null = 0
它们被转换成数字,null
给0
和true
给1
http://ecma-international.org/ecma-262/5.1/#sec-11.8.5
如果情况并非如此,这两个类型(PX)是字符串,并且 类型(py)是字符串,然后
- 让NX是调用ToNumber(PX)的结果。因为px和py 是原始值评估顺序并不重要。
- 让ny是调用ToNumber(py)的结果。
Number(null) //0
Number(true) //1
的JavaScript做了很多类型强制的背景和大量的结果,你会发现AREN” t很有用(见http://wtfjs.com/)。
在这种情况下,被强制为1的真值大于被强制为0的空值。由于1大于0,结果为真。
如果操作数中的一个是布尔值,布尔操作数转换为 1,如果它是真实的,0,如果它是假的。
从MDN。
比较运算符“>”强制它的左侧和右侧转换为数字。 Number(true)是1,Number(null)是0,所以paitance中的内容被取为“1> 0”,结果总是为真。
后面发生的事情是关系运算符(在这种情况下为>
)在执行比较之前执行类型强制转换。在执行ToPrimitive
时,true被强制为1,null为0。 您可以在此处查看操作员实际工作方式的详细信息here
是的,因为null是伪造表达式(然后* false *),比较运算符会将其转换为_number_(然后为true = 1和false = 0)。 – 2012-07-23 14:41:30
** @阿德里亚诺**发布它的答案就是这样! – elclanrs 2012-07-23 14:42:11
http://stackoverflow.com/questions/801032/null-object-in-javascript – diEcho 2012-07-23 14:42:20