14-数组方法,已删除或者未定义的元素
8.6 数组方法,已删除或者未定义的元素
在数组方法中,人们经常犯错的地方是这些函数处理未定义和已删除元素的方式。当数组中的元素未被赋值或已被删除时, map 、 filter 和 reduce 就不会调用所传入的函数。比如:在ES6之前,如果想耍点小聪明,用下面的方式来初始化一个数组,那将会令人很失望:
const arr = Array(10).map(function(x) { return 5 });
执行上述语句后, arr 还是一个有10个元素的数组,但所有元素都是 undefined 。类似地,如果从数组中删除一个元素,然后再调用 map ,就会得到一个有“缺口”的数组:
const arr = [1, 2, 3, 4, 5];
delete arr[2];
arr.map(x => 0); // [0, 0, <1 empty slot>, 0, 0]
实际上,这是一个很罕见的情况,因为编程中遇到的大多数数组,其元素都是被明确定义好的(除非就是想让数组中有一个缺口,这种情况很罕见。一般情况下不会在数组中用delete),不过,意识到这种特殊情况的存在还是会对大家有所帮助。