面点复习小记

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

先从两者进行简要认识查阅记录起:浏览器

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 可能会出现的状况

字面意思就是没有值,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

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

相关文章
相关标签/搜索