javascript 數(shù)組
javascript 數(shù)組用于在單一變量中存儲(chǔ)多個(gè)值。
以下為 javascript 數(shù)組范例:
>var cars = ["saab", "volvo", "bmw"];
1. 什么是數(shù)組?
數(shù)組是一種特殊的變量,它能夠一次存放一個(gè)以上的值。
如果您有一個(gè)項(xiàng)目清單(例如,汽車品牌列表),在單個(gè)變量中存儲(chǔ)汽車品牌應(yīng)該是這樣的:
var car1 = "saab"; var car2 = "volvo"; var car3 = "bmw";
不過,假如您希望遍歷所有汽車并找到一個(gè)特定的值?假如不是三個(gè)汽車品牌而是三百個(gè)呢?
解決方法就是數(shù)組!
數(shù)組可以用一個(gè)單一的名稱存放很多值,并且還可以通過引用索引號(hào)來訪問這些值。
2. 創(chuàng)建數(shù)組
使用數(shù)組文本是創(chuàng)建 javascript 數(shù)組最簡單的方法。
語法:
var array-name = [item1, item2, ...];
范例
var cars = ["saab", "volvo", "bmw"];
空格和折行并不重要。聲明可橫跨多行:
范例
var cars = [ "saab", "volvo", "bmw" ];
請(qǐng)不要最后一個(gè)元素之后寫逗號(hào)(比如 "bmw",)。
可能存在跨瀏覽器兼容性問題。
3. 使用 javascript 關(guān)鍵詞 new
下面的例子也會(huì)創(chuàng)建數(shù)組,并為其賦值:
范例
var cars = new array("saab", "volvo", "bmw");
以上兩個(gè)例子效果完全一樣。無需使用 new array()。
出于簡潔、可讀性和執(zhí)行速度的考慮,請(qǐng)使用第一種方法(數(shù)組文本方法)。
4. 訪問數(shù)組元素
我們通過引用索引號(hào)(下標(biāo)號(hào))來引用某個(gè)數(shù)組元素。
這條語句訪問 cars 中的首個(gè)元素的值:
var name = cars[0];
這條語句修改 cars 中的首個(gè)元素:
cars[0] = "opel";
范例
var cars = ["saab", "volvo", "bmw"]; document.getelementbyid("demo").innerhtml = cars[0];
[0] 是數(shù)組中的第一個(gè)元素。[1] 是第二個(gè)。數(shù)組索引從 0 開始。
5. 改變數(shù)組元素
這條語句修改了 cars 中第一個(gè)元素的值:
cars[0] = "opel";
范例
var cars = ["saab", "volvo", "bmw"]; cars[0] = "opel"; document.getelementbyid("demo").innerhtml = cars[0];
6. 訪問完整數(shù)組
通過 javascript,可通過引用數(shù)組名來訪問完整數(shù)組:
范例
var cars = ["saab", "volvo", "bmw"]; document.getelementbyid("demo").innerhtml = cars;
7. 數(shù)組是對(duì)象
數(shù)組是一種特殊類型的對(duì)象。在 javascript 中對(duì)數(shù)組使用 typeof 運(yùn)算符會(huì)返回 "object"。
但是,javascript 數(shù)組最好以數(shù)組來描述。
數(shù)組使用數(shù)字來訪問其“元素”。在本例中,person[0] 返回 bill:
數(shù)組:
var person = ["bill", "gates", 62];
對(duì)象使用名稱來訪問其“成員”。在本例中,person.firstname 返回 bill:
對(duì)象:
var person = {firstname:"john", lastname:"doe", age:46};
8. 數(shù)組元素可以是對(duì)象
javascript 變量可以是對(duì)象。數(shù)組是特殊類型的對(duì)象。
正因如此,您可以在相同數(shù)組中存放不同類型的變量。
您可以在數(shù)組保存對(duì)象。您可以在數(shù)組中保存函數(shù)。你甚至可以在數(shù)組中保存數(shù)組:
myarray[0] = date.now; myarray[1] = myfunction; myarray[2] = mycars;
9. 數(shù)組屬性和方法
javascript 數(shù)組的真實(shí)力量隱藏在數(shù)組的屬性和方法中:
范例
var x = cars.length; // length 屬性返回元素的數(shù)量 var y = cars.sort(); // sort() 方法對(duì)數(shù)組進(jìn)行排序
我們將在下一章學(xué)習(xí)數(shù)組方法。
10. length 屬性
length 屬性返回?cái)?shù)組的長度(數(shù)組元素的數(shù)目)。
范例
var fruits = ["banana", "orange", "apple", "mango"];
fruits.length; // fruits 的長度是 4
length 屬性始終大于最高數(shù)組索引(下標(biāo))。
11. 訪問第一個(gè)數(shù)組元素
范例
fruits = ["banana", "orange", "apple", "mango"]; var first = fruits[0];
12. 訪問最后一個(gè)數(shù)組元素
范例
fruits = ["banana", "orange", "apple", "mango"]; var last = fruits[fruits.length - 1];
13. 遍歷數(shù)組元素
遍歷數(shù)組的最安全方法是使用 "for" 循環(huán):
范例
var fruits, text, flen, i; fruits = ["banana", "orange", "apple", "mango"]; flen = fruits.length; text = "<ul>"; for (i = 0; i < flen; i++) { text += "<li>" + fruits[i] + "</li>"; }
您也可以使用 array.foreach() 函數(shù):
范例
var fruits, text; fruits = ["banana", "orange", "apple", "mango"]; text = "<ul>"; fruits.foreach(myfunction); text += "</ul>"; function myfunction(value) { text += "<li>" + value + "</li>"; }
14. 添加數(shù)組元素
向數(shù)組添加新元素的最佳方法是使用 push() 方法:
范例
var fruits = ["banana", "orange", "apple", "mango"];
fruits.push("lemon"); // 向 fruits 添加一個(gè)新元素 (lemon)
也可以使用 length 屬性向數(shù)組添加新元素:
范例
var fruits = ["banana", "orange", "apple", "mango"];
fruits[fruits.length] = "lemon"; // 向 fruits 添加一個(gè)新元素 (lemon)
警告!
添加最高索引的元素可在數(shù)組中創(chuàng)建未定義的“洞”:
范例
var fruits = ["banana", "orange", "apple", "mango"];
fruits[6] = "lemon"; // 向 fruits 添加一個(gè)新元素 (lemon)
15. 關(guān)聯(lián)數(shù)組
很多編程元素支持命名索引的數(shù)組。
具有命名索引的數(shù)組被稱為關(guān)聯(lián)數(shù)組(或散列)。
javascript 不支持命名索引的數(shù)組。
在 javascript 中,數(shù)組只能使用數(shù)字索引。
范例
var person = []; person[0] = "bill"; person[1] = "gates"; person[2] = 62; var x = person.length; // person.length 返回 3 var y = person[0]; // person[0] 返回 "bill"警告!
假如您使用命名索引,javascript 會(huì)把數(shù)組重定義為標(biāo)準(zhǔn)對(duì)象。
之后,所有數(shù)組的方法和屬性將產(chǎn)生非正確結(jié)果。
范例:
var person = []; person["firstname"] = "bill"; person["lastname"] = "gates"; person["age"] = 62; var x = person.length; // person.length 將返回 0 var y = person[0]; // person[0] 將返回 undefined
16. 數(shù)組和對(duì)象的區(qū)別
在 javascript 中,數(shù)組使用數(shù)字索引。
在 javascript 中,對(duì)象使用命名索引。
數(shù)組是特殊類型的對(duì)象,具有數(shù)字索引。
17. 何時(shí)使用數(shù)組,何時(shí)使用對(duì)象?
- javascript 不支持關(guān)聯(lián)數(shù)組
- 如果希望元素名為字符串(文本)則應(yīng)該使用對(duì)象。
- 如果希望元素名為數(shù)字則應(yīng)該使用數(shù)組。
18. 避免 new array()
沒有必要使用 javascript 的內(nèi)建數(shù)組構(gòu)造器 new array()。
請(qǐng)使用 [] 取而代之!
下面兩條不同的語句創(chuàng)建了名為 points 的新的空數(shù)組:
var points = new array(); // 差 var points = []; // 優(yōu)
下面兩條不同的語句創(chuàng)建包含六個(gè)數(shù)字的新數(shù)組:
var points = new array(40, 100, 1, 5, 25, 10); // 差 var points = [40, 100, 1, 5, 25, 10]; // 優(yōu)
new 關(guān)鍵詞只會(huì)使代碼復(fù)雜化。它還會(huì)產(chǎn)生某些不可預(yù)期的結(jié)果:
var points = new array(40, 100); // 創(chuàng)建包含兩個(gè)元素的數(shù)組(40 和 100)
假如刪除其中一個(gè)元素會(huì)怎么樣?
var points = new array(40); // 創(chuàng)建包含 40 個(gè)未定義元素的數(shù)組!?。?/span>
19. 如何識(shí)別數(shù)組
常見的問題是:我如何知曉某個(gè)變量是否是數(shù)組?
問題在于 javascript 運(yùn)算符 typeof 返回 "object":
var fruits = ["banana", "orange", "apple", "mango"];
typeof fruits; // 返回 object
typeof 運(yùn)算符返回 "object",因?yàn)?javascript 數(shù)組屬于對(duì)象。
解決方案 1:
為了解決這個(gè)問題,ecmascript 5 定義了新方法 array.isarray():
array.isarray(fruits); // 返回 true
此方案的問題在于 ecmascript 5 不支持老的瀏覽器。
解決方案 2:
創(chuàng)建您自己的 isarray() 函數(shù)以解決此問題:
function isarray(x) { return x.constructor.tostring().indexof("array") > -1; }
假如參數(shù)為數(shù)組,則上面的函數(shù)始終返回 true。
或者更準(zhǔn)確的解釋是:假如對(duì)象原型包含單詞 "array" 則返回 true。
解決方案 3:
假如對(duì)象由給定的構(gòu)造器創(chuàng)建,則 instanceof 運(yùn)算符返回 true:
var fruits = ["banana", "orange", "apple", "mango"];
fruits instanceof array // 返回 true