一、相同点
- 都是原始类型的值,且保存在栈中变量本地
- 进行条件判断时,都是false
//ECMAScript认为undefined是null派生出来的,所以定义他们值是相同的
console.log(undefined == null);//true
二、不同点
- null是js的关键字,undefined是全局变量
- 类型不一样
typeof(null) // object typeof(undefined) //undefined console.log(typeof(null) === 'object')//true console.log(typeof(undefied) === 'undefined')//true
- 转换值不一样
console.log(Number(undefined));//NaN console.log(Number(1+ undefined));//NaN console.log(Number(null));//0 console.log(Number(12+ null));//12
出现场景
undefined
- 在变量提升(预解析)阶段,只声明未定义,默认值就是undefined。
- 2在JS的严格模式下(”use strict”),没有明确的主体,this指的就是undefined。
- 3函数定义没有返回值(return或者return后⾯什么也不带),默认的返回值就是undefined。
- 函数定义形参不传值,默认就是undefined。
- 对象没有这个属性名,属性值默认就是undefined。
- 在数组的find⽅法中,没有找到的情况下是undefined。
null
- ⼿动设置变量的值或者对象某⼀个属性值为null(此时不赋值,会在后⾯的代码中进⾏赋值,相当于初始化。)
- 在JS的DOM元素获取中,如果没有获取到指定的元素对象,结果⼀般是null。
- Object.prototype._proto_的值也是null。
- 在正则捕获的时候,如果没有捕获到结果,默认也是null。
总结
- undefined 代表的含义是未定义,null 代表的含义是空对象。一般变量声明了但还没有定义的时候会返回 undefined,null主要用于赋值给一些可能会返回对象的变量,作为初始化。
- 开始不知道值,一般最好用
null
作为初始的空值,因为0
值不是空值,它在栈内存中有自己的存储空间(占了位置) - 当需要释放一个对象的时候可以将该对象赋值为null,进而来释放对象