1、 indexOf
方法有兩個缺點,一是不夠語意化,它的意思是找到參數值的第一個出現位置,所以要去比較是否不等於-1
,表達起來不夠直覺。二是,它內部使用嚴格相等運算子(===
)進行判斷,這會導致對NaN
#的誤判。
NaN!=NaN //ES5[NaN].indexOf(NaN)// -1 //ES6[1, 2, NaN].includes(NaN) // true
2、 fill
方法也可以接受第二個和第三個參數,用來指定填滿的起始位置和結束位置。
如果填滿的型別為對象,那麼被賦值的是同一個記憶體位址的對象,而不是深拷貝物件。
let arr = new Array(3).fill({name: "Mike"});arr[0].name = "Ben"; arr// [{name: "Ben"}, {name: "Ben"}, {name: "Ben"}]let arr = new Array(3).fill([]); arr[0].push(5);arr// [[5], [5], [5]]
3、陣列實例的find
方法,用來找出第一個符合條件的陣列成員。它的參數是一個回呼函數,所有陣列成員依序執行該回呼函數,直到找出第一個傳回值為true
的成員,然後傳回該成員。如果沒有符合條件的成員,則傳回undefined
。 陣列實例的findIndex
方法的用法與find
方法非常類似,傳回第一個符合條件的陣列成員的位置,如果所有成員都不符合條件,則傳回-1
。 這兩個方法都可以接受第二個參數,用來綁定回呼函數的this
物件。
4、陣列實例的copyWithin
方法,在目前陣列內部,將指定位置的成員複製到其他位置(會覆寫原有成員),然後傳回目前陣列。也就是說,使用這個方法,會修改目前數組。
它接受三个参数。
target(必需):从该位置开始替换数据。如果为负值,表示倒数。
start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。
end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
[1, 2, 3, 4, 5].copyWithin(0, 2, 4)// [3, 4, 3, 4, 5]
4、Array.of
基本上可以用来替代Array()
或new Array()
,并且不存在由于参数不同而导致的重载。它的行为非常统一。
//ES6Array.of() // []Array.of(undefined) // [undefined]Array.of(1) // [1]Array.of(1, 2) // [1, 2]//ES5Array() // []Array(3) // [, , ,]Array(3, 11, 8) // [3, 11, 8]
Array.of
方法可以用下面的代码模拟实现。
function ArrayOf(){ return [].slice.call(arguments);}
相关推荐:
以上是js數組知識總結分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!