javascript筆記(二)
數組
length
設置length會導致數組丟掉超長的數據,很危險售躁,要小心预烙。
var arr = ["1",2,3,4]
arr.length
4
arr.length = 1
1
arr
["1"]
arr.length = 4
4
arr
["1", undefined × 3]
以undefined填充為賦值的元素墨微。
push,pop默伍,shift欢嘿,unshift
push,pop 在數組的末尾塞/刪元素
unshift也糊,shift 在數組的開頭塞/刪元素
他們都會改變數組的length屬性值
delete
用delete刪除數組的一個元素炼蹦,不會改變數組的length。使數組變?yōu)橄∈钄到M狸剃。
arr
["1", 2, 3, 4]
delete arr[2]
true
arr
["1", 2, undefined × 1, 4]
以undefined填充掐隐。
splice
splice也可以用于刪除元素,并且返回被刪除的元素钞馁。會改變數組的length虑省。
param1是要刪除元素的index,param2是刪除的個數僧凰。
arr
["1", 2, 3, 4]
arr.splice(2,1)
[3]
arr
["1", 2, 4]
數組復制和連接contact
arr
["1", 2, 4]
var b = arr.concat()
undefined
b
["1", 2, 4] -------復制
b.concat(5,6,7)
["1", 2, 4, 5, 6, 7] -------復制b探颈,并且連接參數返回一個新數組
b
["1", 2, 4] -------b不會改變
b.concat([5,6])
["1", 2, 4, 5, 6]
截取slice
arr
[1, 2, 3, 4]
b = arr.slice(1)
[2, 3, 4]
arr
[1, 2, 3, 4]
arr.slice(1,3)
[2, 3]
slice()截取數組,不會影響原數組训措。第二個參數是結束為止(不會截取該位置,從0開始算的)伪节,沒有第二個參數光羞,是截取到最后。所以實際上也可以用來復制數組怀大。
插入刪除 splice
splice()函數接受三個參數:1纱兑,定位index 2,要刪除的項數 3化借,要插入的元素潜慎。
會改變原數組。
要刪除的項數大于剩下的總數蓖康,不會報錯铐炫,刪除index后面的所有元素。
```
arr
[1, 2, 3, 4]
arr.slice(1,3)
[2, 3]
arr
[1, 2, 3, 4]
arr.splice(1,1,"A","B")
[2] --------------函數的返回值是被刪除的元素數組
arr
[1, "A", "B", 3, 4] ------會改變原數組
```
排序sort
比較的是字符串蒜焊,調用toString()方法轉換成字符串排序驳遵。默認是升序排列。
會改變原數組山涡。
數組字符串化 join
使用join可以連接數組的每個元素,返回字符串唆迁。
arr
[1, 2, 3, 4]
arr.join("-")
"1-2-3-4"
arr = [1,2,3,[4,5,6]]
[1, 2, 3, Array[3]]
arr.join("-")
"1-2-3-4,5,6" --------不會遞歸的
再說length
記籽即浴:數組的長度是比數組最大索引值多一的數。
var a = ["a","b", "c"]
undefined
a.length
3
a[100] = "c"
"c"
a.length
101
中間的值會被undefined填充唐责。
循環(huán)
循環(huán)可以
for (var i = 0; i < a.length; i++) {
// Do something with a[i]
}
也可以
for (var i in a) {
// Do something with a[i]
}
注意鳞溉,如果有人向 Array.prototype 添加了新的屬性,使用這樣的循環(huán)這些屬性也同樣會被遍歷鼠哥。所以并不推薦這種方法
ECMAScript 5 增加了遍歷數組的另一個方法 forEach():
["dog", "cat", "hen"].forEach(function(currentValue, index, array) {
// Do something with currentValue or array[index]
});