为什么(true>;null)在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作为调

有人能告诉我为什么下面的代码在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作为调用ToNumber(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);