前言:
这道面试题也是比较的经典,如果需要我来打星的话,可以给个五颗星,相当于就是可以不问,问就是需要你好好回答的。
一、从定义上来讲
undefined:未定义。表示 此处应该有一个值,但是还没有定义。
null:空的。表示 没有对象,即此处不应该有值。
二、从数据类型上来看
首先undefined和null都是基本数据类型
typeof(undefined) // 'undefined'
typeof(null) // 'object'
从typeof的结果来看,undefined和null的结果是不一致的。
加分回答:为什么null的数据类型是object,因为null值表示一个空对象指针。
三、从 == 和 === 来看
undefined == null // true
undefined === null // false
加分回答:
1、在"=="的时候不能说undefined和null隐式转换,因为undefined和null是不能转为其他类型的值再进行比较的。并且规定了undefined == null
。所以说只要记住就行了,因为它们都代表着无效的值
2、在"==="的时候因为null和undefined它们不属于同一数据类型所以不全等。
四、undefined 从用法上
1、已经声明,未赋值
let a
console.log(a)
ps:但是你不能未声明变量,直接console.log(变量名),那样是会报错的
2、对象某个属性不存在
let obj= {}
console.log(obj.a)
3、函数里面少了参数
function fn (a,b){
console.log(a,b)
}
fn(4)
4、函数默认返回值(构造函数除外)
function fn(){
}
console.log(fn())
五、null 从用法上
1、手动释放内存
let obj = {}
obj = null
2、作为函数的参数(此参数不是对象)
调用函数时传入 null 作为参数,表示本次函数调用的参数没有值(没有内容)
3、原型链的顶端
加分项:
原型链的终点是Object.prototype.__proto__
而Object.prototype.__proto__=== null
结果是true
结尾:你们的点赞是对我最大的支持,阅读量超过50,更新下一题.