背景:面试问到null与undefined区别,回的不是很满意,查阅一些资料做了简要复习记录,有不足和错望各位指正

先从二者进行简要认识查阅记录起:

undefined可能会出现地方

1,变量申明但未赋值

var name
console.log(name)  // undefined
name返回undefind 因为name未赋有效值也未被使用过,始终处于原始状态

2,函数定义了行参

function test(name){
    console.log(name) // undefined
}
test()

由于test定义了参数,但在执行test时候并未传参,导致name参数就是原始,为赋值的变量

3,对象Object.不存在的变量

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是运算符

void 0 或者 void(0)// undefined

void false // undefined

void [] // undefined

注:ECMAScript 规范 void 运算符 对给定的表达式进行求值,返回都是 undefined

最终可说明一点,undefind是来自某个表达式最原始的状态值,并非人为操作而得

undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined

null 可能会出现的情况

字面意思就是没有值,null是JavaScript里面的关键字,表示没有值或者不存在任何值
即:在内存里的表示就是,栈中的变量没有指向堆中的内存对象

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

复习小记,有错望各位大佬指正,建议改进


码厨
27 声望5 粉丝

学无止境...