JavaScript中的數組特性介紹,javascript數組特性

來源:互聯網
上載者:User

JavaScript中的數組特性介紹,javascript數組特性

與Java語言不同,JavaScript中的數組擁有三個特性:

 

1.無類型。數組的成員可以是任何類型,同一個數組也可以由很多不同類型的成員所組成。
2.長度可變。數組的長度是可以動態變化的,因此在JavaScript中不存在數組訪問的越界問題。
3.不連續性。數組中成員的位置可以是連續的(0, 1, 2, 3…),也可以是不連續的。任何數組都有一個名為length的屬性,在數群組成員連續的情況下,length值與數群組成員數目一致;當數群組成員不連續時,length值要大於數群組成員的數目。與連續的數組相比,不連續數組的讀寫效能要差一些。

 

實驗:


複製代碼 代碼如下:
var o = [42, "Sample Text", {x:88}];//JavaScript array is un-typed.
console.log(o);//[42, "Sample Text", Object {x=88}]
o[3] = 27;//JavaScript array is dynamic.
console.log(o);//[42, "Sample Text", Object {x=88}, 27]
o[5] = 99;//JavaScript array is sparse.
console.log(o);//[42, "Sample Text", Object {x=88}, 27, undefined, 99]


從上面的例子中可以看到,對於不連續的數組,當訪問到缺失的那個成員時,JavaScript將返回undefined。如果數組連續,但是其中某個成員為undefined,那麼訪問數組的結果是一樣的:


複製代碼 代碼如下:
var a = [42, "Sample Text", {x:88}, 27, undefined, 99];
console.log(a);//[42, "Sample Text", Object {x=88}, 27, undefined, 99]


數組不連續、有成員缺失,跟數組連續、但有成員為undefined,這兩種情況下訪問數組內容所得到的結果是一樣的。但在這兩者之間還是存在一些細微的差別,主要表現在對數組key的訪問上:


複製代碼 代碼如下:
console.log(4 in o);//false
console.log(4 in a);//true


可以看到,這兩種情況下雖然訪問內容所得到的結果一致,但是其內部機制是完全不同的:在數組不連續的情況下,某個成員缺失,因此當訪問該成員時,JavaScript返回了undefined;在數組連續的情況下,所有的成員都存在,只是某些成員的值比較特殊,為undefined而已。

從上面的例子中也可以看到,JavaScript中的數組究其本質只是以數字為key的對象而已,與普通的索引值對對象沒有任何差別。事實上,在對數組進行讀取和寫入操作時,JavaScript會試圖將參數轉換為正整數,如果轉換成功則將進行數組操作(自動更新數組的length屬性),如果失敗則將參數轉換成字串後進行普通對象的讀寫操作。當然,在JavaScrpt解譯器的實現中,針對數組的這種以數字作為key的特性作了很多效能最佳化,因此在實際使用過程中,如果對象的key都是數字,那麼直接使用數組對象會得到更加高效的結果。

在對數組進行已定義流程中,JavaScript允許出現多餘的逗號,也允許兩個逗號間出現數群組成員的缺失:


複製代碼 代碼如下:
var x = [1,2,3,];//trailing comma will be omitted.
console.log(x.length);//3
        
var y = [1,,3];//member can be missed.
console.log(y);//[1, undefined, 3]
console.log(1 in y);//false
console.log(y.length);//3


對於數組的建立,JavaScript支援四種方法:

1.使用字面量(如上述幾個例子中的中括號運算式)來直接建立數組對象。
2.使用Array()建構函式,不傳入任何參數。在這種情況下,將建立一個空數組,其效果與[]等同。
3.使用Array()建構函式,傳入一個正整數作為數組的長度。在這種情況下,JavaScript將預留相應的記憶體空間來儲存這個數組。值得注意的是,此時數組的key都是沒有被定義的,也即數組中沒有任何成員。其效果與[,,,,]這樣的寫法等同
4.使用Array()建構函式,傳入數組的成員。

實驗:


複製代碼 代碼如下:
var z = new Array(10);//pre-allocate memory, but no index is defined yet.
console.log(3 in z);//false

var m = new Array(42, 33, 99, "test", {k:99});
console.log(m);//[42, 33, 99, "test", Object {k=99}]

在ECMAScript 5標準中,可以用Array.isArray()來判斷某個對象是否是數組:
複製代碼 代碼如下:
Array.isArray([]);//true
Array.isArray({});//false

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.