背景:面试问到null与undefined区别,回的不是很满意,查阅一些资料作了简要复习记录,有不足和错望各位指正面试
先从两者进行简要认识查阅记录起:浏览器
1,变量申明但未赋值函数
var name console.log(name) // undefined name返回undefind 由于name未赋有效值也未被使用过,始终处于原始状态
2,函数定义了行参prototype
function test(name){ console.log(name) // undefined } test() 因为test定义了参数,但在执行test时候并未传参,致使name参数就是原始,为赋值的变量
3,对象Object.不存在的变量code
console.log(Object.name) // undefined 之前我一直觉得Object是简单的对象,结果今天(2020-4-10)打开浏览器控制台 console.log(Object) 结果是这样的:ƒ Object() { [native code] } 即便:function Object() { [native code] } 又是一脸懵逼,难道说Object原型是Function??? Function.prototype.name = function(){} for(var i in Objetc){ console.log(i) // 输出了read } 紧接着查阅了了MDN上的资料 [MDN关于Object][1] Object 构造函数为给定值建立一个对象包装器。若是给定值是 null 或 undefined,将会建立并返回一个空对象,不然,将返回一个与给定值对应类型的对象。 当以非构造函数形式被调用时,Object 等同于 new Object()。
此处查阅了MDN Object对象
4,使用void对表达式求值 void是运算符ip
void 0 或者 void(0)// undefined void false // undefined void [] // undefined 注:ECMAScript 规范 void 运算符 对给定的表达式进行求值,返回都是 undefined
最终可说明一点,undefind是来自某个表达式最原始的状态值,并不是人为操做而得内存
undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined
字面意思就是没有值,null是JavaScript里面的关键字,表示没有值或者不存在任何值
即:在内存里的表示就是,栈中的变量没有指向堆中的内存对象get
var test = null console.log(test) //null 能够经过 Object.prototype.toString.call(null) // "[object Null]" null是一个有效不存在值的对象
一个对象或者被赋值为null时,原来的对象在内存中就是一个找不到家的孩纸,垃圾回收会在某个时机收回该对象并释放内存。全部若是须要释放某个对象或者变量就简单赋值为null原型
null与undefined区别
1,类型不一样
console.log(typeof null) // object console.log(typeof undefined) // undefined // 可经过如下或者各自真实类型 Object.prototype.toString.call(null) // "[object Null]" Object.prototype.toString.call(undefined) // "[object Undefined]"
null是一个有效不存在值的对象,而且是不可改变的,undefined的对象类型是自己未定义最初状态值
小细节 变量等于null小栗子 var test = null console.log(test*10) // 0 变量等于undefined小栗子 var test console.log(test*10) // NaN 从上两小栗子可得出: 任何具备null值的变量算术运算(+,-,*,/)都会产生整数值,而任何具备undefined值的变量算术运算(+,-,*,/)会致使变量为NaN
2,转换为原始类型的方式不一样
null与undefined转换类型不一样,null在算术运算转换时会转为数字类型0,而undefined则不会执行任何转换即最终为NaN
null ---> 0 undefined ---> NaN
null转为0
var _null = 10 + null console.log(_null) // 10
undefined 添加到数字则不转换
var _und = 10 + undefined console.log(_und) // NaN
复习小记,有错望各位大佬指正,建议改进