为什么(true>;null)在JavaScript中总是返回true?
有人能告诉我为什么下面的代码在JavaScript中返回true吗为什么(true>;null)在JavaScript中总是返回true?,javascript,Javascript,有人能告诉我为什么下面的代码在JavaScript中返回true吗 console.log(true > null); //returns true null类似于false,在本例中,它是0作为一个数字true是1作为一个数字 1比0大()可能是因为true=1其中null=0它们被转换成数字,null给出0而true给出1 如果不是类型(px)都是字符串和 类型(py)是字符串,然后 设nx是调用ToNumber(px)的结果。因为px和py 原语值的计算顺序并不重要 让ny作为调
console.log(true > null); //returns true
null
类似于false
,在本例中,它是0
作为一个数字true
是1
作为一个数字
1
比0
大(
)可能是因为true=1
其中null=0
它们被转换成数字,null
给出0
而true
给出1
如果不是类型(px)都是字符串和
类型(py)是字符串,然后
代码不正确,您需要执行以下操作:
console.log(true > typeof null);
JavaScript在后台执行大量类型强制,您会发现很多结果都没有用处(请参阅) 在这种情况下,强制为1的true大于强制为0的null。由于1大于0,因此结果为真 如果其中一个操作数是布尔操作数,则布尔操作数将转换为 如果为真,则为1;如果为假,则为+0 从。中,比较运算符“>”强制将其左侧和右侧转换为数字。
数字(true)是1,数字(null)是0,因此在paradensis中的内容被视为“1>0”,这在结果中始终是真的。后面发生的是关系运算符(
在本例中)在进行比较之前执行类型强制。执行ToPrimitive
时,true强制为1,null强制为0。
您可以在此处查看运算符实际工作方式的详细信息Yes,因为null是一个falsy表达式(然后为false),比较运算符将其转换为一个数字(然后为true=1和false=0)。@Adriano将其作为答案发布就是这样@elclanrs我懒得写一个参考JavaScript标准的完整答案(对于感兴趣的人,请从第11.8.2节开始)。谢谢你的回答。我想知道为什么null==0为false?然后我意识到这需要强迫。因此,对于那些需要绝对证明的人,请尝试+null==0,其计算结果为true,以证明确实null被强制为0。我只是觉得这可能会帮助别人。
console.log(true > typeof null);