为什么 null 是一个对象以及 null 和 undefined 有什么区别?
为什么在 JavaScript 中
null
被视为
对象
?
检查
if ( object == null )
Do something
是否与检查
if ( !object )
Do something
相同?
此外:
null
和
undefined
之间有什么区别?
(name is undefined)
您:
什么是
name
?
(*)
JavaScript:
name
?什么是
name
?我不知道您在说什么。您之前从未提到过任何
name
。您是否在(客户端)端看到了其他脚本语言?
name = null;
您:
什么是
name
?
JavaScript:
我不知道。
简而言之;
undefined
表示不存在任何事物的概念;它没有类型,并且从未在该范围内被引用过;
null
表示已知事物存在,但不知道其值是什么。
需要记住的一点是,
null
在概念上与
false
或
""
等不同,即使它们在类型转换后相等,即
name = false;
您:
name
是什么?
JavaScript:
布尔值 false。
name = '';
您:
name
是什么?
JavaScript:
空字符串
*:
name
在此上下文中表示从未定义的变量。它可以是任何未定义的变量,但是,name 是几乎任何 HTML 表单元素的属性。它的历史可以追溯到很久以前,早在 id 之前就已存在。它很有用,因为 id 必须是唯一的,但名称不必如此。
差异可以总结为以下代码片段:
alert(typeof(null)); // object
alert(typeof(undefined)); // undefined
alert(null !== undefined) //true
alert(null == undefined) //true
检查
object == null
与检查
if ( !object )
不同。
后者等于
! Boolean(object)
,因为一元
!
运算符会自动将右操作数转换为布尔值。
由于
Boolean(null)
等于 false,因此
!false === true
。
因此,如果您的对象 不是 null , 而是 false 或 0 或 "" ,则检查将通过,因为:
alert(Boolean(null)) //false
alert(Boolean(0)) //false
alert(Boolean("")) //false
null
不是对象
,它是一个
原始值
。例如,您无法向其添加属性。有时人们会错误地认为它是一个对象,因为
typeof null
返回
"object"
。但这实际上是一个错误(甚至可能在 ECMAScript 6 中得到修复)。
null
和
undefined
之间的区别如下:
-
undefined
:由 JavaScript 使用,表示“无值”。未初始化的变量、缺少的参数和未知变量具有该值。> var noValueYet; > console.log(noValueYet); undefined > function foo(x) { console.log(x) } > foo() undefined > var obj = {}; > console.log(obj.unknownProperty) undefined
但是,访问未知变量会产生异常:
> unknownVariable ReferenceError:unknownVariable 未定义
-
null
:程序员用它来表示“无值”,例如作为函数的参数。
检查变量:
console.log(typeof unknownVariable === "undefined"); // true
var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true
var bar = null;
console.log(bar === null); // true
一般来说,在 JavaScript 中,您应该始终使用 ===,而不要使用 ==(== 会执行
各种转换
,这些转换可能会产生意外结果)。检查
x == null
是一个边缘情况,因为它适用于
null
和
undefined
:
> null == null
true
> undefined == null
true
检查变量是否有值的常用方法是将其转换为布尔值并查看它是否为
true
。该转换由
if
语句和布尔运算符执行! (“不”)。
function foo(param) {
if (param) {
// ...
}
}
function foo(param) {
if (! param) param = "abc";
}
function foo(param) {
// || returns first operand that can't be converted to false
param = param || "abc";
}
此方法的缺点:以下所有值的计算结果均为
false
,因此您必须小心(例如,上述检查无法区分
undefined
和
0
)。
-
undefined
、null
-
布尔值:
false
-
数字:
+0
、-0
、NaN
-
字符串:
""
您可以使用
Boolean
作为函数(通常它是一个构造函数,与
new
一起使用)来测试转换为布尔值:
> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true