數組空值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 }
相關文章
相關標籤/搜索