数组空值empty

Array构造函数只带一个数字参数时(不然是做为填充),该参数会被做为数组的预设长度,而非填充一个元素,所以数组内是空单元javascript

若是一个数组中存在一个空单元,即length的值大于实际单元数,这样的数组称为稀疏数组java

var a = (new) Array(3) // 目前chrome返回[empty * 3], 以前好像是[undefined * 3]
// new可用可不用,不用的话内部会自动添加
var b = [undefined, undefined, undefined]
var c = []
c.length = 3 // 目前chrome返回[empty * 3], 以前好像是[undefined * 3]

就以前的返回值来看a,b,c很一致,但空单元与undefined并不相同chrome

a.map(function(v,i){ return i; }); // 目前chrome返回[empty * 3], 以前是[undefined * 3]
b.map(function(v,i){ return i; }); // [0, 1, 2]

var d = ['a', 'b', 'c', 'd']
delete d[1]

d.map((item, index) => {
  return {
    item,
    index,
  }
})
// (4) [{item: "a", index: 0}, empty, {item: "c", index: 2}, {item: "d", index: 3}]

好在如今返回的是empty而非undefined,能够获得识别数组

然而某些方法如join在对待空单元的表现与undefiend一致app

a.join('-'); // "--"
b.join('-'); // "--"
//实现参考以下
function fakeJoin(arr,connector) {
  var str = "";
  for (var i = 0; i < arr.length; i++) {
  // 它主要考虑的是数组长度,这个是关键
    if (i > 0) {
    str += connector;
    }
    if (arr[i] !== undefined) {
      str += arr[i];
    }
  }
  return str;
}

想要填充undefined在数组中而非empty能够使用以下表达式函数

var arr = Array.apply(null, { length: 3 }) // [undefined, undefined, undefined]
// apply第二参数要求是数组或类数组(存在length属性)

ES6添加了Array.of()方法来初始化数组,在只填入一个参数的状况是做为数组的填充而非设置长度rest

var array1 = Array.of(3) //[3]
var array2 = Array.of(1,2,3) //[1,2,3]

//模拟
function arrayOfLike() {
  return [].slice.call(arguments)
  // return [...arguments] ES6
}
// or
function arrayOfLike(...rest) { return rest }
相关文章
相关标签/搜索