又结束了段繁忙期,来聊聊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。
以上便是我对二者的理解,欢迎补充!!

浙公网安备 33010602011771号