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