JavaScript的數組,相比其他語言,是比較特殊的。數組是Object類型,只不過,有幾個比較特殊的地方: 可以看到,如果不指定key值,數組會自動添加預設索引下標值,將其作為key。 這種情況下,length又是如何計算的呢? 從上面的代碼可以看出,length值是根據最大的索引下標計算的,也 ...
JavaScript的數組,相比其他語言,是比較特殊的。數組是Object類型,只不過,有幾個比較特殊的地方:
- 有索引下標
- 有預設的length屬性
- 是有序的(註意,對象是無序的)
- 可以使用一些特殊的數組方法,比如,forEach, filter, map等等
1 var a = [1,2]; 2 a['r'] = 6; 3 for(var key in a) 4 { 5 console.log('key:'+key + ';value:' + a[key]); 6 } 7 8 // output 9 key:0;value:1 10 key:1;value:2 11 key:r;value:6
可以看到,如果不指定key值,數組會自動添加預設索引下標值,將其作為key。
這種情況下,length又是如何計算的呢?
1 var a = [1,2]; 2 a['r'] = 6; 3 console.log(a.length); //output: 2 4 5 var b = []; 6 b[0]=1; 7 b[2]=5; 8 console.log(b.length); //output: 3
從上面的代碼可以看出,length值是根據最大的索引下標計算的,也就是說,
- 為了改變length的值,必須給數組設置key為number的value;
- length = 最大的number key的值 + 1;
那麼,如果在數組上面應用Object的delete方法會怎麼樣呢?
1 var a = [1,2]; 2 a['r'] = 6; 3 delete a[1]; 4 5 console.log(a.length); // output: 2 6 console.log(a); // output: [1, undefined]
利用delete可以刪除數組的元素值,但是,無法刪除它的索引下標,所以,數組的length值不會改變。
如果要真正的刪除數組元素,必須使用splice函數,如下:
var a = [1,2]; a['r'] = 6; a.splice(1,1); console.log(a); //output: [1]