又结束了段繁忙期,来聊聊Null和Undefined吧

前言:

我们经常会遇到这两位特殊的数据类型,比如查一个对象的属性时,如果这个对象没有这个属性就会报undefined(原型链)。又比如我们可以将一个对象置为null,就可以释放这个对象的引用,以便浏览器回收。那为什么会出现这些情况呢,下面让我们去了解下这两种数据类型吧。

一、Undefined类型是什么

Undefined类型只有一个值那就是undefined。在使用var来定义一个变量而未赋值时,这个变量的值就是undefined。(摘自Javascript高级程序设计)

让我们来验证下这句话。

var msg;
console.log(msg===undefined);

浏览器运行的结果自然是true。除了这种方法来证明它是undefined之外还有别的办法吗?当然还有,我们可以借助typeof操作符。

var msg;
console.log(typeof msg);

返回的结果是’undefined‘。自然也可以帮助我们来识别。

我们经常会调用一个函数并传入参数,如果传的参数少于形参数量,多的形参其实值都为undefined。

function fun(a,b,c){
    console.log(a,b,c)
}
fun(2)

  很显然,返回值为:2 undefined  undefined

这里还需要跟大家分辨一个组合:定义却未赋值,未定义。

定义却未赋值,它的结果自然是我们上头提到的undefined。

如果是未定义这个变量而调用这个变量呢?也会返回undefined吗?并不然,它会报错

二、Null类型是什么呢?

  Null类型也只有一个值,那就是null。从逻辑角度上看,null代表一个空对象指针。(摘自Javascript高级程序设计)

  正因为它代表一个空对象指针,所以当我们用上面的typeof运算符去查看一个null值的变量时,结果为’object‘。(扩展:typeof也不能区分Array类型和Object类型)。

  那我们可以用什么来确定这个是null呢?可以用===或者新方法Object.prototype.toString.call(null)

 

var obj=null;
console.log(obj==null);
console.log(Object.prototype.toString.call(obj))

 

返回值依次为true和[object Null],以上就能判断出是否为null值

说了这么多,那我们什么时候要用到null呢?

我认为有两种情况可以用到null

1.初始赋值,表明将要赋值为对象
2.结束前,让对象成为垃圾对象(被浏览器的垃圾回收器回收)

三、Undefined和Null有啥异同吗?

1.注意点

Undefined是派生自Null值的,所以在ECMA-262规定对他们的相等性测试要返回true。

也就是null==undefined返回true。但是null===undefined返回的是false,所以在上文提到利用===来分别辨别null值和undefined值,而不是用==

2.不同点

a.没有必要将一个变量初始化赋值为undefined(因为未赋值就会是undefined),但有必要将一个对象初始置为null。

b.调用Number函数转化为数值时不一样:undefined为NaN ,null为0。

以上便是我对二者的理解,欢迎补充!!

 

posted @ 2020-12-04 11:24  白马过平川Z  阅读(268)  评论(0)    收藏  举报