第七章 數組
1、數組直接量的語法允許有可選的結尾的逗號,所以[ , , ]只有兩個元素而非三個。
2、調用構造函數Array()創建數組時,傳入一個參數時表示指定數組的長度。
3、所有的索引都是屬性名,但只有在0~2^32-2之間的整數屬性名才是索引。所有的數組都是對象,可以為其創建任意名字的屬性。但如果使用的屬性是數組的索引,數組的特殊行為就是將根據需要更新它們的length屬性值。
4、名字不是非負整數時,只能當作常規的對象屬性,而非數組的索引。
5、稀疏數組就是包含從0開始的不連續索引的數組。可以用Array()構造函數或簡單地指定數組的索引值大于當前的數組長度來創建稀疏數組。
6、當省略數組直接量中的值時,這時所得到的數組也是稀疏數組,省略掉的值是不存在的。
7、設置length屬性為一個小于當前長度的非負整數n時,當前數組中那些索引大于或等于n的元素將從中刪除。
8、delete操作并不影響數組長度,如果從數組中刪除一個元素,它就變成稀疏數組。
9、循環中數組的長度應該只查詢一次而非每次循環都要查詢。
10、slice()方法中如果參數出現負數,它表示相對于數組中最后一個元素的位置。slice()不會修改調用的數組。
11、splice()會修改調用的數組。
12、當使用多個參數調用unshift()時它的參數是一次性插入的,而非一個個地插入。這意味著最終數組中插入的元素的順序和它們在參數列表中的順序一致。
13、傳遞給map()的函數的調用方式和傳遞給forEach()的函數的調用方式一樣。但傳遞給map()的函數應該有返回值。它返回的是新數組,不修改調用的數組。
14、filter()會跳過稀疏數組中缺少的元素,它的返回數組總是稠密的。將稀疏數組變為稠密數組:var dense=sparse.filter(function(){return true;});
15、every()方法:當且僅當數組中的所有元素調用判定函數都返回true時,它才返回true。some()方法:當數組中至少有一個元素調用判定函數返回true,它就返回true。
16、根據數學上的慣例,在空數組上調用時,every()返回true,some()返回false。
17、判定一個對象是否是數組:使用Array.isArray()函數或者對象的toString()方法。
18、把擁有一個數值length屬性和對應非負整數屬性的對象看作一種類型的數組,叫做類數組對象。比如arguments對象和一些DOM方法返回的對象。
19、通過Array.prototype.slice.call(a,0)將類數組對象a轉換為真正的數組。
20、字符串是不可變值,故當把他們作為數組看待時,它們是只讀的,如push()/sort()/reverse()/splice()等數組方法會修改數組,他們在字符串上是無效的。