转载:http://www.css88.com/archives/6236#more-6236
关于undefined
在JavaScript中,undefined
这个词有多重含义。首字母大写的Undefined
表示的是一种数据类型,首字母小写的undefined
表示的是属于这种数据类型的唯一的一个值。但这两种undefined
都只能存在于文档或规范中,不能存在于JavaScript代码中。
在JavaScript代码中,你看到的undefined
最有可能是全局对象的一个属性,该属性的初始值是就是前面所说的原始值undefined
,还有种情况就是,这个undefined
是个局部变量,就像其他普通变量一样,没有任何特殊性,它的值不一定是undefined
,但通常情况下都是的。下面我们所说的undefined
,都指的是window.undefined
这个属性.
在ES3中(Firefox4之前),window.undefined
就是一个普通的属性,你完全可以把它的值改变成为任意的真值,但在ES5中((Firefox4之后),window.undefined
成了一个不可写,不可配置的数据属性,它的值永远是undefined
。
你可以使用严格相等运算符来判断一个值是否是undefined
:
注: 这里必须使用严格相等运算符===
,而不能使用普通的相等运算符==
,因为x == undefined
成立还可能是因为x
为null
,在JavaScript中null==undefined
是返回true
的.
另外,还可以使用typeof
来判断:
有时必须使用typeof
的原因是,如果一个变量根本没有被声明,只有使用typeof
判断才不会报错,用相等运算符判断会抛出异常.
不过如果要检测的变量是个全局变量,可以不使用typeof
.可以通过检测全局对象的同名属性来代替:
关于null
null
是一个 JavaScript 字面量,而不是全局对象的一个属性(undefined
是全局对象的一个属性),表示空值(null 或者 “空” 值),即没有对象被呈现(no object value is present)。它是 JavaScript 原始值 之一。在 APIs 中,null
常被放在期望一个对象,但是不引用任何对象的参数位置。当检测 null
或undefined
时,注意相等(==
)与全等(===
)两个操作符的区别 (前者会执行类型转换)。
null 与 undefined 的不同点:
-
undefined
表示一个变量没有被声明,或者被声明了但没有被赋值(未初始化),一个没有传入实参的形参变量的值为undefined
,如果一个函数什么都不返回,则该函数默认返回undefined;
-
null
是一个表示“没有值”的值; - Javascript将未赋值的变量默认值设为
undefined;
- Javascript从来不会将变量设为
null
。它是用来让程序员表明某个用var
声明的变量时没有值的; -
undefined
不是一个有效的JSON,而null
是; -
undefined
的类型(typeof)是undefined;
-
null
的类型(typeof)是object
. ; - 它们都是基本类型;
- 他们都是falsy (
Boolean(undefined)
->// false,Boolean(null)
->// false); - 你可以这样判断一个变量是否是undefined。
typeof variable === "undefined";
- 你可以这样判断一个变量是否是
null
。variable === null
; - 双等号比较时它们相等(
null==undefined
->// true),但三等号比较时不相等(null===undefined
->// false);