我的代码如下,我不清楚
var a = null;
if(a==undefined)
alert("true");
else
alert("false");
当我在上面运行代码时,它会发出警告。
有人可以解释这背后的原因或概念吗?
答案 0 :(得分:9)
这是真的,因为==
是松散等于运算符,null
和undefined
松散相等(null == undefined
为真)。如果使用严格相等运算符===
,则它们不相等(null === undefined
为false)。
基本上,松散的相等运算符会强制其操作数,如果它们的类型不同(请参阅规范中的Abtract Equality Comparison)。例如,0 == ""
是正确的,因为如果您将""
强制转换为数字,则为0
。严格相等运算符认为不同类型的操作数不相等(参见Strict Equality Comparison);它没有强迫。
答案 1 :(得分:0)
定义了==
运算符的specifications,以便null == undefined
返回true
。
答案 2 :(得分:0)
此行为源于JavaScript是一种松散类型的语言。在相等的情况下,这意味着可以比较不同数据类型的值。
null
和undefined
都被视为" falsy",因此它们被认为是平等的。
逻辑上,如果null == false
和undefined == false
,则null == undefined
。
答案 3 :(得分:0)
规范-Clause 11.9.3。参见第2和第3条。
答案 4 :(得分:-1)
undefined
表示尚未定义变量或赋值。 null
是javascript
中的特殊对象。
使用等于==
比较值将始终为您提供true
,因为它们在值(0, nothing, nada, zip)
中基本相同。
虽然使用严格等于===
,但会返回false
,因为null是object
而undefined
只是空白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?