null和undefined有很多小伙伴分不清,null是空,有容乃大,可以是任何值,undefined是未定义,只能是未定义。
二者的区分
null和undefined都是js中的特殊值,表示缺失或未定义的值。
null表示一个空对象指针,即该变量本应该指向一个对象,但是现在没有指向任何一个对象。例如:
var obj = null;
undefined表示一个未定义的值,即该变量没有被赋值或者被赋值为undefined。例如:
var x;
console.log(x); // undefined
在条件判断中,null和undefined都会被转换为false,但是在其他方面,它们有一些不同的行为。
例如,对于对象属性的访问,如果该属性不存在,返回的是undefined,而不是null:
var obj = {a: 1};
console.log(obj.b); // undefined
另外,null可以被赋值给任何类型的变量,而undefined只能被赋值给undefined类型的变量:
var x = null;
console.log(x); // null
var y;
y = undefined;
console.log(y); // undefined
具体场景用法
- null的使用场景:
- 初始化一个变量,表示该变量目前没有任何值。
- 作为函数的参数,表示该函数的参数不需要传递任何值。
- 作为对象的属性值,表示该属性目前没有任何值。
例如:
var x = null; // 初始化变量
function foo(param) {
if (param === null) {
console.log("param is null");
}
}
foo(null); // 作为函数参数
var obj = {a: null}; // 作为对象属性值
- undefined的使用场景:
- 变量声明但未初始化时,变量的默认值就是undefined。
- 对象属性不存在时,访问该属性返回的值就是undefined。
- 函数没有返回值时,返回值默认就是undefined。
例如:
var x; // 声明但未初始化
console.log(x); // undefined
var obj = {a: 1};
console.log(obj.b); // 访问不存在的属性
function foo() {
// 没有返回值
}
console.log(foo()); // 函数没有返回值
需要注意的是,null和undefined都可以表示缺失或未定义的值,但是在具体使用时,需要根据场景选择使用哪种类型的值。