JavaScript 類數組對象

定義


JavaScript 類數組對象的定義:javascript

能夠經過索引訪問元素,而且擁有 length 屬性;java

沒有數組的其餘方法,例如 pushforEachindexOf 等。數組

舉例說明prototype

var foo = {
    0: 'Java',
    1: 'Python',
    2: 'Scala',
    length: 3
}

轉換


若是類數組對象須要轉化爲數組,能夠用 Array.prototype.slice.callcode

var foo = {
    0: 'Java',
    1: 'Python',
    2: 'Scala',
    length: 3
}

var arr = Array.prototype.slice.call(foo);

其實一開始看到這個表達式感受比較費解,後來查了一些資料,終於明白了,特別作一些說明:對象

第一, foo 原本是沒有 slice 方法的, Array.prototype.slice.call(foo) 這個表達式至關於賦予 foo 這個對象 slice 方法。blog

第二, Array.prototype.slice.call(foo); 至關於 Array.prototype.slice.call(foo, 0); 是把取一個數組(或者類數組)的子集,並做爲一個數組返回。因此當後面的做用對象是一個類數組時,就會把這個類數組對象轉換爲了一個新的數組。索引

因此,上面的一段代碼等價於ip

var foo = {
    0: 'Java',
    1: 'Python',
    2: 'Scala',
    length: 3
}

foo.slice = Array.prototype.slice;
foo.slice();

特性


類數組只有索引值和長度,沒有數組的各類方法,因此若是要類數組調用數組的方法,就須要使用 Array.prototype.method.call 來實現。get

例如,若是遍歷一個類數組,能夠這樣實現:

Array.prototype.forEach.call(foo, function(item){
    console.log(item);
});

添加一個元素

Array.prototype.push.call(foo, 'PHP');

// foo = {0: "Java", 1: "Python", 2: "Scala 111", 3: "PHP", length: 4}

原文:https://blog.taotao.io/javascript-array-like-object/

相關文章
相關標籤/搜索