为什么null == undefined计算结果为true?

时间:2016-07-28 08:01:14

标签: javascript

我的代码如下,我不清楚

var a = null; 
if(a==undefined)
alert("true");
else 
alert("false");

当我在上面运行代码时,它会发出警告。

有人可以解释这背后的原因或概念吗?

6 个答案:

答案 0 :(得分:9)

这是真的,因为==松散等于运算符,nullundefined松散相等(null == undefined为真)。如果使用严格相等运算符===,则它们不相等(null === undefined为false)。

基本上,松散的相等运算符会强制其操作数,如果它们的类型不同(请参阅规范中的Abtract Equality Comparison)。例如,0 == ""是正确的,因为如果您将""强制转换为数字,则为0。严格相等运算符认为不同类型的操作数不相等(参见Strict Equality Comparison);它没有强迫。

答案 1 :(得分:0)

定义了==运算符的specifications,以便null == undefined返回true

答案 2 :(得分:0)

此行为源于JavaScript是一种松散类型的语言。在相等的情况下,这意味着可以比较不同数据类型的值。

nullundefined都被视为" falsy",因此它们被认为是平等的。

逻辑上,如果null == falseundefined == false,则null == undefined

答案 3 :(得分:0)

规范-Clause 11.9.3。参见第2和第3条。

答案 4 :(得分:-1)

undefined表示尚未定义变量或赋值。 nulljavascript中的特殊对象

使用等于==比较值将始终为您提供true,因为它们在值(0, nothing, nada, zip)中基本相同。

虽然使用严格等于===,但会返回false,因为null是objectundefined只是空白variable

答案 5 :(得分:-1)

如果变量指向任何内容,则为null。这在概念上类似于尚未初始化的未定义变量。

Javascript将此解释为使得松散相等(==)以相同的方式处理null和undefined。严格的平等(===)更挑剔;如果你有不同的数据类型,如null和undefined,它们将不相等。

请参阅What is the difference between null and undefined in JavaScript?有关undefined和null之间差异的信息 Which equals operator (== vs ===) should be used in JavaScript comparisons?