首页 > 为什么不能用arr === null 来判断数组为空?

为什么不能用arr === null 来判断数组为空?

判断数组为空的一种方法是检查 arr.length === 0.而用arr === null 则会报错.
为什么呢?


null代表未声明,undefined代表未定义
比如var arr = []
这里分两部分
先是var arr 此时声明变量arr
arr = [] 这时就是定义arr为数组对象
因为arr被声明过所以不可能为null

而arr被定义成空数组,虽然有定义,但原始值是""
(经过提醒,数组的原始值就是[],但在运算的时候会被强转成"")
所以如果用 arr == false的话就会返回true

length那不用说了吧


null 和 Array 是两种不同的基本数据类型
空数组 [] 的类型是 Array ,
它们俩当然不可能相等


因为空数组一般是[],而不是null

如果哪个库的实现把空数组返回成null,那真的是脑子有坑。


直接 if(arr) 不就行了么


null是表示该对象已经创建 但是没有值。。arr=[]表示该数组是一个是一个对象并且长度为0 但是并不是null


=== 判断值和类型是否都相等(只有在相同类型下,才会比较其值);

arr.length === 0 ==> arr.length返回的是number类型,0也是number类型;再去比较值,显然值相等;所以返回true;

arr === null ==> arr和null都属于object类型;arr转换成数值类型后值是NaN, null转换后值为0,所以返回false;


肯定不能的,=== 是不仅值相等,类型还相等,arr 是数组类型,null 是 NULL类型


感觉上面这些回答会让人很乱啊。。其实回头看看题主的问题,总结一下就是:
为什么arr !== null,其实就是既然arr是数组,那么就是Array对象,表象上就是一对中括号,里面有没有值无所谓,那么[]怎么可能 === null的呢,或者换个角度,new Array() 怎样可以 === null的呢。
这样解释多直接。


js中的数据类型
字符串、数字、布尔、数组、对象、Null、Undefined
===全等比较
比较2个相同类型的对象,如果类型不同,就直接返回false,如果类型相同,那就比较具体的值或具体的引用地址

var arr=null;
if(arr===null){
    console.log('arr is null');
}
arr=undefined;
if(arr===null){
    console.log('arr is null');
}else if(arr===undefined){
    console.log('arr is undefined');
}
//arr赋值一个数组对象
arr=[];
//if(arr.length==0){
if(arr.length===0){
   console.log('arr is empty');
}

所以在判断数组是否为空时,可以使用以下代码
对象在做逻辑判断的时候,如果值为null,undefined,转化boolean值 false

try{
    if(!arr||(Object.prototype.toString.call(arr)==='[object Array]'&&arr.length===0))            {
       console.log('arr is null or empty');
    }
}cathc(error){
    //处理arr未被声明的情况
}
【热门文章】
【热门文章】