var a = null;
if(a==undefined)
alert("true");
else
alert("false");
当我运行上面的代码时,它会弹出true。有人能解释一下这背后的原因或概念吗?
var a = null;
if(a==undefined)
alert("true");
else
alert("false");
==
是“松散”相等运算符,而null
和undefined
是松散相等的(null == undefined
为true)。如果使用严格相等运算符 ===
,则它们不相等(null === undefined
为false)。
基本上,如果不同类型的操作数,则“松散”相等运算符将强制转换它们(请参见规范中的抽象相等比较)。例如,0 ==“”
是true,因为如果将“”
强制转换为数字,则为0
。严格相等运算符认为不同类型的操作数不相等(请参见严格相等比较);它不强制转换。
在浏览器中,有一个第三个值与null
和undefined
相等:document.all
。 document.all
在各种规范操作中的行为类似于undefined
。这是为了确保使用if(document.all)
或类似语句来执行IE特定代码的旧代码不会在现代浏览器上执行,因为它们回避的功能在处理document.all
的IE版本上存在。这在规范中定义。
undefined
表示变量未被定义或赋值。 null
是 JavaScript 中的一个特殊对象。
使用等于号 ==
进行比较将始终返回true
,因为它们在值上基本相同 (0、nothing、nada、zip)
。
然而,使用严格等于号 ===
将返回false
,因为 null 是一个对象
,而 undefined
只是一个空白的变量
。
如果一个变量指向空值,它就是null。这在概念上类似于未初始化的未定义变量。
Javascript解释器将其解释为松散相等(==)以相同的方式处理null和undefined。严格相等(===)更加挑剔;如果您有不同的数据类型,例如null和undefined,它们将不相等。
请参见JavaScript中null和undefined之间的区别是什么?了解undefined和null之间的区别以及在JavaScript比较中应该使用哪个等于运算符(== vs ===)?
这种行为源于JavaScript是一种弱类型语言。在相等性的情况下,这意味着可以比较不同数据类型的值。
null
和undefined
都被认为是“假”,因此它们被松散地视为相等。
从逻辑上讲,如果null == false
和undefined == false
,那么null == undefined
。
0 == null
是false
,false == undefined
是false
,NaN == ""
是false
,... - T.J. Crowder
===
代替==
;-) - Álvaro González