JS中 null 与 undefined 的区别
简单通俗点讲:
null 表示一个值被定义了,定义为“空值”,声明了,但我设定他的值就是空值,是可以作为一个值来进行赋值的;undefined 表示根本不存在值的定义,也就是变量声明了,但不能用他来进行赋值。
一)两者十分相似
用一个代码就能说明
f (!undefined)
console.log('undefined is false');
// undefined is false
if (!null)
console.log('null is false');
// null is false
undefined == null
// true
在 if 语句中,undefined 和 null 都能被转换成 false ,用相等运算符甚至直接报告两者相等。
二)为什么 JS 的开发者要设置这两个值
因此,Brendan Eich又设计了一个undefined
三)具体区别
null 能被作为一个值进行赋值,但undefined不可以
回到文章最先的那段话:
null 表示一个值被定义了,定义为“空值”,声明了,但我设定他的值就是空值,是可以作为一个值来进行赋值的;
undefined 表示根本不存在定义,也就是变量被声明了,但是没有赋值,不能用他来进行赋值。
所以设置一个值为 null 是合理的,如
objA.valueA = null;
但设置一个值为 undefined 是不合理的,如
objA.valueA = undefined;
// 应该直接使用 delete objA.valueA;
// 任何一个存在引用的变量值为undefined都是一件错误的事情。
这样判断一个值是否存在,就可以用
objA.valueA === undefined
// 不应使用 null 因为 undefined == null,而 null 表示该值定义为空值
四)用法
目前,null和undefined基本是同义的,只有一些细微的差别。
null表示"没有对象",即该处不应该有值。典型用法是:
Object.getPrototypeOf(Object.prototype)
// null
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
参考文章:undefined与null的区别