![]() |
VOOZH | about |
JavaScript 數組是值的有序集合,所謂有序即數組的下標或索引從零開始遞增,但也可能是稀疏的,數組長度可通過 length 屬性獲得。數組中元素的類型是任意的,創建數組時無需聲明數組長度,它是動態的,會根據需要自動增長或縮減。數組繼承自Array.prototype,它定義了一套豐富的數組操作方法,這個在後面會介紹到。
1、創建數組使用數組直接量:
var empty = ; var primes = [2, 3, 5, 7, 11]; var misc = [1.1, true, 「a」, ]; var base = 1024; var table = [base, base + 1, base + 2, base + 3]; var b = [[1, {x: 1, y: 2}], [2, {x: 3, y: 4}]];
var count = [1, , 3]; var undefs = ;
使用構造函數Array:
var a = new Array; var a = new Array(10); var a = new Array(5, 4, 3, 2, 1, 「testing, testing」);2、讀寫數組元素
讀寫數組元素使用操作符,索引值是個非負整數,但也可以使用負數或非整數來索引數組,這種情況下,數值轉換為字符串,字符串作為屬性名來用,其實數組就是個特殊的對象。
var a = [「world」]; var value = a[0]; a[1] = 3.14; a[-1.23] = true; a[「1000」] = 0; a[1.000]3、稀疏數組
稀疏數組就是包含從0開始的不連續索引的數組,通常,數組的 length 屬性值代表數組中元素的個數,如果數組是稀疏的,length 屬性值大於元素的個數。足夠稀疏的數組通常在實現上比稠密的數組更慢、內存利用率更高,在這樣的數組中查找元素的時間與常規對象屬性的查找時間一樣長。實際上,絕大多數 JavaScript 數組不是稀疏數組,如果確實碰到了稀疏數組,只不過它們包含一些 undefined 值。
4、數組長度數組長度的屬性是 length,如果為一個數組元素賦值,它的索引大於或等於現有數組的長度時,length 屬性的值將設置為索引值加 1。另一方面,設置 length 屬性為一個小於當前長度的非負整數時,當前數組中那些索引值大於或等於這個設置值的元素將從中刪除,如果設置值大於當前數組長度,數組尾部創建一個空的區域。
5、添加和刪除數組元素添加數組元素直接給新索引賦值即可,刪除時可用 delete 操作符,類似於賦 undefined 值,但略有不同。delete 不會修改數組 length 屬性,也不會修改其它屬性的索引,而是留下一個空白。數組元素的添加和刪除還有一些方法可以使用,這個在後面會提到。
6、數組遍歷數組遍歷常用 for 循環、for/in 循環,或者 forEach,forEach 使得數組擁有簡單而強大的函數式編程風格,如下例子。
var data = [1, 2, 3, 4, 5]; var sumOfSquares = 0; data.forEach(function(x) { sumOfSquares += x*x; });7、多維數組
多維數組即數組的數組,數組元素是另一個數組。
8、數組方法join:將數組中所有元素都轉化為字符串並連接在一起,返回最後生成的字符串,可以指定一個可選的字符串在生成的字符串中來分隔數組的各個元素,如果不指定分隔符,默認使用逗號。
reverse:將數組中的元素顛倒順序,返回逆序的數組,原數組替換為逆序數組。
sort:將數組中的元素排序後並返回排序後的數組,當不帶參數調用時,數組元素以字母表順序排序,如果數組包含 undefined 元素,它們會被排到數組的尾部,下面是一個簡單的例子,給方法傳遞了一個比較函數。
var a = [33, 4, 1111, 222] a.sort(function(a, b) { return a - b; });
concat:創建並返回一個數組,它的元素包括調用這個方法的原始數組的元素和這個方法的每個參數,如果這些參數中的任何一個自身是數組,則連接的是數組的元素,而非數組本身,但不會遞歸扁平化數組的數組。
slice:返回指定數組的一個片段或子數組,不會修改調用的數組。它的兩個參數分別指定了片段的開始和結束的位置,返回的數組包含第一個參數指定的位置和所有到但不含第二個參數指定的位置之間的所有數組元素。如果只指定一個參數,返回的數組將包含從開始位置到數組結尾的所有元素,參數可以是負數,表示相對於數組中最後一個元素的位置。
push:數組尾部添加一個或多個元素,返回新數組的長度。
pop:數組尾部的一個元素彈出,返回這個彈出的元素。
unshift:數組頭部添加一個或多個元素,返回新數組的長度。
shift:數組頭部的一個元素彈出,返回這個彈出的元素。
toString:將數組每個元素轉換為字符串並且輸出用逗號分隔的字符串列表。
toLocaleString:是 toString的本地化版本。
ES5 定義了一些功能強大的方法,大多數方法的第一個參數接收一個函數,並且對數組的每個元素調用一次該函數,如果是稀疏數組,對不存在的元素不調用傳遞的函數。在大多數情況下,調用提供的函數使用三個參數,它們是數組元素、元素的索引和數組本身。通常,只需要第一個參數值,可以忽略後兩個參數。大多數 ES5 數組方法的第一個參數是一個函數,第二個參數是可選的。如果有第二個參數,則調用的函數被看做是第二個參數的方法。也就是說,在調用函數時傳遞進去的第二個參數作為它的 this 關鍵字的值來使用。ES5 中的數組方法都不會修改它們調用的原始數組,但是,傳遞個這些方法的的函數時可以修改這些數組的。
forEach:從頭至尾遍歷數組。
map:將調用的數組的每個元素傳遞給指定的函數,並返回一個數組,它包含該函數的返回值。如果是稀疏數組,返回的是相同長度的稀疏數組。
filter:過濾數組,返回的數組元素是調用的數組的一個子集,會跳過稀疏數組中缺少的元素。
some:數組邏輯判定,對數組元素應用指定的函數進行判定,只要有一個元素符合判定條件就返回 true,有短路特性。
every:數組邏輯判定,對數組元素應用指定的函數進行判定,只要有一個元素不符合判定條件就返回false,有短路特性。
reduce:使用指定的函數將數組元素進行組合,生成單個值,數組元素從左往右開始計算。
reduceRight:使用指定的函數將數組元素進行組合,生成單個值,數組元素從右往左開始計算。
indexOf:從頭至尾搜索整個數組中具有給定值的元素,返回找到的第一個元素的索引,沒有找到返回 -1。
lastIndexOf:與 indexOf搜索方向相反。
10、數組類型判斷一個對象是否是數組可以使用 Array.isArray 方法。
11、類數組對象有時候,一個對象的表現就像一個數組一樣,這時候這個類數組對象就可以使用一些數組方法。
var a = {「0」: 「a」, 「1」: 「b」, 「2」: 「c」, length: 3}; // 類數組對象 Array.prototype.map.call(a, function(x) { Return x.toUppercase; }); // [「A」, 「B」, 「C」];12、作為數組的字符串
如下字符串的行為類似於只讀數組。
var s = 「javascript」; s.charAt(0); // 「j」 s[1]; // 「a」