不少人在學習原生JS的過程當中會遇到一些疑惑,好比在學習array時,就很容易搞不清哪些方法會改變原來數組,哪些方法不會改變原來數組?再好比不少人會使用new Date()獲取時間,卻搞不清楚1970年是什麼鬼。這篇文章就是針對諸如此類問題的總結。若是你有這方面的疑惑,千萬不要錯過這篇文章哦~segmentfault
1.JS 數組特色(重點知識)
(1)數組元素能夠是任意類型的,而且同一個數組的不一樣元素也多是不一樣的類型數組
(2)數組是動態的:根據須要它們會增加或者縮減,而且在建立時無需聲明一個固定大小或者在數組大小變化時無需從新分配空間函數
(3)數組元素的索引不必定要連續的,它們之間能夠有空缺。若是省略數組直接量中的某個值,省略的元素在數組中是存在的,省略的元素將被賦予undefined值學習
(4)JS數組就是JS對象的特殊形式,數組索引實際上和碰巧是整數的屬性名差很少。JS將指定的數字索引值轉換成字符串——索引值1變成「1」,而後將其做爲屬性名來用。全部的數組都是對象,能夠爲其建立任意名字的屬性。可是若是使用的屬性是數組的索引,數組的特殊行爲就是根據須要更新它們的length屬性值。code
注意事項:
1)區分數組的索引和對象的屬性名
全部的索引都是屬性名,但只有0——2^32-2的整數屬性名纔是索引。
2)稀疏數組
稀疏數組就是包含從0開始的不連續索引的數組。若是數組是稀疏的,length屬性值大於元素的個數。
3)數組長度
若是爲一個數組元素賦值,它的索引i大於或者等於現有數組的長度時,length的屬性將設置爲i+1
設置length屬性爲一個小於當前長度的非負整數n時,當前數組中那些索引值大於或等於n的元素將從中刪除
4)delete
delete能夠用來刪除一個數組元素,這相似於隱式給數組元素賦值undefined,不會修改數組的length屬性對象
2.數組方法
不改變原數組:join(有返回)concat(有返回) sort(有返回) toString(有返回)
改變原數組的:reverse sort(有返回) splice(有返回)pop push shift unshift排序
(1)join
將數組中的全部元素轉化爲字符串並鏈接在一塊兒,返回最後生成的字符串。
(2)reverse
將數組中的元素顛倒順序,返回逆序數組。它不經過從新排列的元素來建立新的數組,而是在原來的數組中從新排列了它們。
(3)sort
將數組中的元素排序後並返回排序後的數組。若是數組中包含undefined,它們會被排到數組的尾部。
(4)concat
建立並返回一個新數組,它的元素包含調用concat()的原來數組的元素和concat()的每一個參數。
(5)slice
該方法返回指定數組的一個片斷或子數組。
(6)splice
在數組中插入或者刪除元素的通用方法。splice()會修改調用的數組。splice()返回一個由刪除元素組成的數組。
(7)push() pop() shift() unshift()都會改變數組
(8)toString() toLocalString()
toString()方法將每一個元素轉換爲字符串,而且輸出用逗號分隔的字符串列表。注意輸出不包括方括號或其餘形式的包裹數組值的分隔符索引
3.ECMAScript中新的數組方法
改變原來數組的只有:forEach(無返回)ip
(1)forEach
該方法從頭至尾遍歷數組,爲每一個元素調用指定的函數。
(2)map
該方法將調用的數組的每一個元素傳遞給指定的函數,而且返回一個數組,它包含該函數的返回值。map返回的是新數組:它不修改調用的數組。
(3)filter
該方法返回的數組元素是調用的數組的一個子集。傳遞的函數是來邏輯判斷的:該函數返回true或false。若是返回值爲true或者可以轉換爲true的值,它將被加到一個做爲返回值的數組中。
(4)every和some
every方法當且僅當針對數組中的全部元素調用斷定函數都返回true時,才返回true.
some方法當數組中至少有一個元素調用斷定函數返回true,它就返回true.而且當且僅當數值中的全部元素調用斷定函數都返回false,它才返回false
(5)reduce和reduceRight
reduce和reduceRight方法使用指定的函數將數組元素進行組合,生成單個值。reduce須要兩個參數:一個是執行簡化的函數,另外一個是傳遞給函數的初始值。reduce使用的函數有四個參數:初始值/積累值、數組元素、元素索引、數組自己。
(6)indexOf()和lastIndexOf()
indexOf()和lastIndexOf()搜索整個數組中具備給定值的元素,返回找到的第一個元素的索引或者若是沒有找到就返回-1.indexOf從頭到尾搜索,而lastIndexOf則反向搜索。字符串
總結:
能改變原來數組的有:
sort() reverse() splice() forEach() pop push shift unshift
附:關於數組與類數組的區別,請參考這裏:JS類數組