1、定义
-
null
,是一个对象,表示无值 -
undefined
,是全局对象(window)的一个特殊属性,其值是未定义的,表示缺少值
2、举例
-
undefined表示“缺少值”
典型用法: - 变量被声明了,没有赋值
let a;
console.log(a);
- 调用函数时,应该提供的参数没有提供
function f(x){
console.log(x)
}
f() // undefined
- 对象的属性没有赋值
var o = new Object();
console.log(o.p);
- 函数没有返回值
console.log(f())
- void操作符也可以返回一个
undefined
值
function isUndefined(obj){
return obj === void 0;
}
-
NULL
可行用例: - 显式指定变量为无效(
object = null
)当一个引用不再是必需的,通过分配null
值,有效地清除引用 - 作为原型链的终点DOM,试图获取一个不存在的元素返回一个
null
,间接的,在函数参数中需要传入对象的位置,如果传入的不是对象,就会返回null
Object.getPrototypeOf(Object.prototype)
// null
3、相同点
-
undefined
和null
在if
语句中都会被自动转为false
if (!undefined)
console.log('undefined is false'); // undefined is false
if (!null)
console.log('null is false'); // null is false
- 在做关系运算时,它们都会被转换为相同的布尔值
false
Boolean(null) //false
Boolean(undefined) //false
typeof null //"object"
typeof undefined //"undefined"
4、不同点
-
undefiend
不是 JavaScript 的保留关键字,null
是 JavaScript 保留关键字 - 类型转换时,结果不完全相同
- 当转换为字符串时,
null
和undefiend
分别转换为字符串形式的“null”
和“undefiend”
- 当转换为数值时,
null
和undefiend
分别转换为0
和NaN
-
undefiend
和null
进行算术比较时
console.log(null == undefined); // true 说明值相等
console.log(null === undefined); // false 说明类型不等
-
null
和undefined
都可以转换为 false,但不等值于 false
null == false //false
undefined == false //false
- 所有对象都是 Object 及其子类的实例,但
null
不是,null
更严格应该划分为原始值类型
undefined in window //true
null instanceof Object //false
5、undefined值和类型的差异详解
//声明变量 a,但不初始化
var a;
//判断 a 的数据类型
console.log(typeof a); //"undefined"
//读取 a 的值
console.log(a); //undefined
//判断未声明变量 b 的数据类型
console.log(typeof b); //"undefined"
//读取 b 的值
console.log(b); //ReferenceError: b is not defined
-
typeof
会以字符串形式返回数据类型,但不能区分声明和未声明的变量(使用typeof
运算符操作未声明变量不会报错) - 变量如果未声明,则会抛出引用错误(
ReferenceError
) - 对不同变量求值时,即使未初始化,也会存在默认的
undefined
值 - 更要注意的是,
typeof a
和a
虽然都返回了undefined
,但两者是不同的, - 前者是字符串形式的
"undefined"
- 后者是原始值类型的
undefined
6、需要注意的是
-
undefined
是全局对象的一个属性
当我们在局部,执行变量与undefined
的比较操作时,JavaScript 引擎会尝试搜索作用域链,会一直检索到window.undefined
,所以可以在局部定义一个undefined
,优化性能
//undefined 不是保留字,所以可以用来定义为局部变量
var undefined; //与局部引用比较
if ( x == undefined ){}
参考文章推荐:
阮一峰--undefined与null的区别
简书文章--undefined与null的区别
JS基础之undefined与null的区别分析