当前位置:嗨网首页>书籍在线阅读

14-数组方法,已删除或者未定义的元素

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.6 数组方法,已删除或者未定义的元素

在数组方法中,人们经常犯错的地方是这些函数处理未定义和已删除元素的方式。当数组中的元素未被赋值或已被删除时, mapfilterreduce 就不会调用所传入的函数。比如:在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),不过,意识到这种特殊情况的存在还是会对大家有所帮助。