JavaScript中array.length !=0与array !=[]判断非空数组的差异
为什么
array.length != 0和array != []在JS里不一样? array.length != 0是直接判断数组的元素数量:数组的length属性就是存储元素个数的数值,非空数组的length大于0,判断结果为真;空数组的length是0,判断结果为假。只要array是一个数组(哪怕是空数组),length属性必然存在,不会触发未定义相关的错误。array != []的问题出在JavaScript的引用类型判断逻辑上:[]每次执行都会生成一个全新的空数组对象,它在内存中拥有独立的存储地址。JS比较引用类型时,对比的是对象的内存地址而非内容——哪怕你的array是空数组,它和这个新生成的[]也不是同一个对象,所以array != []永远返回true,循环会无限执行下去。循环过程中可能会出现array被赋值为undefined的情况,此时再去访问它的属性就会触发TypeError: 无法读取未定义的属性。
如果要判断数组是否为空,除了array.length != 0,还可以用更严谨的array.length === 0,或者利用JS隐式类型转换的!array.length(0会被转为false,取反后为true即表示空数组)。
内容的提问来源于stack exchange,提问作者wukong
相关产品推荐
相关产品推荐

