下面定义的几个数组哪一个是稀疏数组?
let arr = [,,,];
let arr1 = new Array(3);
let arr2 = [undefined,undefined,undefined];
let arr3 = new Array();
arr3.length = 3;
用什么方法来检测呢?
in操作符?for-in?还是别的什么
从定义来看,稀疏数组就是没有从0开始的连续的index。
A sparse array is one in which the elements do not have contiguous indexes starting at 0.
所以检测方式可以是,index in array
,是否从0
到array.length - 1
这个表达式都返回true
,如果不是,则表示为稀疏数组。
也可以通过forEach
来判断:
var realCount = 0;
array.forEach(function() { realCount ++;});
if(realCount !== array.length)
console.log('稀疏数组');
那么什么样会有稀疏数组?
有没有被赋值的项,或者
有被删除(delete)的项
例如:
var arr0 = [,,,]; // 稀疏
var arr1 = [1,,2,]; // 稀疏
var arr2 = new Array(3); // 稀疏
var arr3 = new Array(); arr3.length = 3; // 稀疏
var arr4 = [1,2,3]; delete arr4[0]; // 稀疏
// 以下都是非稀疏
var arr5 = [undefined, undefined, undefined];
var arr6 = new Array(3); arr6[0] = undefined; arr6[1] = undefined; arr6[2] = undefined;
注意,虽然arr2,arr3和arr5,arr6看起来都是undefined,但是其实不一样。arr5和arr6都是显式初始化(赋值)每个元素为undefined。浏览器中是区分了未初始化和初始化的:
未初始化的undefined显示的是undefined X ?