相同点
1.null和undefined都是js的基本数据类型
2.undefined和null都是假值(falsy),都能作为条件进行判断,所以在绝大多数情况下两者在使用上没有区别
if(undefined){ console.log('真的'); }else{ console.log('假的'); //执行 } if(null){ console.log('真的'); }else{ console.log('假的'); //执行 }
当我们对两者进行比较的时候
//松散比较(loose equality) console.log(null == undefined); //true //严格比较(strict equality) console.log(null === undefined); //false
不同点
undefined
undefined代表的含义是未定义,一般声明了还没有定义的时候返回undefined, undefined 在 JavaScript中不是一个保留字,这意味着可以使用 undefined 来作为一个变量名,但是这样的做法是非常危险的,它会影响对 undefined值的判断。我们可以通过一些方法获得安全的 undefined 值,比如说 void 0。
什么情况会出现undefined
//a并未定义过 console.log(typeof a); //"undefined" //注意,这里只能使用typeof,直接使用a会造成报错 console.log(a); //Uncaught ReferenceError: a is not defined
//定义但未赋值 let a; console.log(a); //undefined
let a=undefined; console.log(a); //undefined
//1-参数 function blueFn(a, b) { console.log(a, b); } blueFn(12); //12, undefined——因为b没有传值,所以是undefined
const blue={age: 18, gender: 'male'}; console.log(blue.height); //undefined——因为就没有叫height的东西
简单来说大致有五种情况
1.真的是没定义(仅typeof可用)
2.定义了但没赋值
3.直接赋值或返回undefined
4.没有对函数的参数进行赋值
5.没有对应属性
null
null代表的是一个空对象,null主要用于赋值给一些可能会返回对象的变量,作为初始化。
什么情况会出现null
let name = null; console.log(name); //null
function fn1(a) { console.log(a); } fn1(null); //null
const person={name: 'blue', age: null}; console.log(person1.age); //null
总结
null是一个普通值,需要主动使用,只有主动使用时,null才会出现,没有声明null不会自己蹦出来
undefined是一个特殊值,是js中最后的备选方案,当我们向js要求一个“不存在的东西”时,会得到undefined(例如:没赋值的变量、没return的函数、没传的参数)
null本质上是个零,undefined本质上是个特殊对象,null可以和Number类型进行加减乘除,也可以进行比较
Number(null); //0 Number(undefined); //NaN 12+null; //12 12+undefined; //NaN //跟数字比较会更加明显 -5<null; //true——null是0,-5<0 -5<undefined; //false -5>undefined; //false -5==undefined; //false //undefined就不是数字,跟数字没有可比性
解构赋值与undefined、null
const [a=1,b=2]=[undefined, null]; //undefined就是没给——触发默认值 console.log(a); //1 //null是给了,但是空——不触发默认值 console.log(b); //null