Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 空和未定义的不一致比较_Javascript_Operators_Equality Operator - Fatal编程技术网

Javascript 空和未定义的不一致比较

Javascript 空和未定义的不一致比较,javascript,operators,equality-operator,Javascript,Operators,Equality Operator,我很想知道为什么 null == undefined 返回true但是 null >= undefined 返回false 包含大于运算符是否会以不同的方式强制值?在JS=中,运算符将值强制为相同的类型以进行比较,因此1==“1”是true。使用==运算符进行精确的类型匹配tl;dr在本例中,=最终将两个参数强制为数字:未定义的被强制为NaN,而null被强制为0,两者不相等。对于=,规范明确定义null==undefined为true 事实上,这两种情况下的值都是强制的(至少在某种

我很想知道为什么

null == undefined
返回
true
但是

null >= undefined
返回
false


包含大于运算符是否会以不同的方式强制值?

在JS
=
中,运算符将值强制为相同的类型以进行比较,因此
1==“1”
true
。使用
==
运算符进行精确的类型匹配

tl;dr在本例中,
=
最终将两个参数强制为数字:
未定义的
被强制为
NaN
,而
null
被强制为
0
,两者不相等。对于
=
,规范明确定义
null==undefined
true


事实上,这两种情况下的值都是强制的(至少在某种意义上,
=
的情况是特殊的)。让我们一次考虑一个,借助于规范< /P>
=
运算符的使用由其他关系运算符共享。从规范中的描述中,我们可以看到算法执行以下操作:

  • 将参数转换为原语(原语
    null
    undefined
    已经存在)
  • 检查参数是否为
    String
    s(它们不是)
  • 如果它们不是
    String
    s,则算法将参数转换为数字(参见步骤3.a.和3.b.)并与结果进行比较
  • 最后一点是关键。从中,我们看到
    未定义的
    被强制为
    NaN
    ,并且算法认为与
    NaN
    的任何比较都是错误的(参见步骤3.c.和3.d.)。因此,
    null>=undefined
    false



    对于另一种情况,
    =
    ,故事实际上要简单得多:作为“抽象等式比较算法”的一部分,
    null==undefined
    是正确的(参见步骤2和3)。因此,
    null==undefined
    true

    undefined
    是一个变量,只要您不定义它,它恰好是未定义的。我认为强制只能与“==”一起工作。Edit:hmm有趣,false>=null实际上返回true。所以现在我也很好奇;)
    包含大于运算符是否以不同的方式强制值?
    包含
    >
    表示不会强制值。抱歉,在这个上下文中,“强制”是什么意思?如果>=不强制,为什么false>=null会返回true?并不是问==和==之间的区别,而是问==和>=之间的区别,这是一个很好的解释。所以这也解释了为什么false>=null会导致“true”,那么这两个值都会被强制为“0”,对吗?@docta_faustus:没错。@frontend_dev:Yep,这两个
    false
    null
    都会被强制为
    +0
    抽象关系比较算法
    哇,真是太多了。不过学到了一些东西,很不错。警报(+null)//0警报(+未定义)//NaN