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


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

空数组 数组 JavaScript

暴走的骚动 9 years, 7 months ago

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

uillmm answered 9 years, 7 months ago

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

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

Eliotte answered 9 years, 7 months ago

直接 if(arr) 不就行了么

御姐女王控 answered 9 years, 7 months ago

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

湿太请自重 answered 9 years, 7 months ago

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

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

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

dafanxu answered 9 years, 7 months ago

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

若离Evans answered 9 years, 7 months ago

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未被声明的情况
}

Atlas answered 9 years, 7 months ago

Your Answer