JS物件和陣列的區別

2020-07-16 10:05:08
JavaScript 中的物件(Object)和陣列(Array)有時候看起來很相似,但它們是兩種不同型別的資料集合,其中物件是包含已命名的值的無序集合,而陣列則是包含已編碼的值的有序集合。

範例1

下面範例分別使用物件和陣列來儲存 1 和 true 這兩個值。程式碼結構如下:
var o = {  //物件
    x :1,  //該值命名為x
    y : true  //該值命名為y
}
var a = [  //陣列
    1,  //該值隱含編碼為0
    true  //該值隱含編碼為1
]
物件的儲存形式很像陣列,因此被稱為關聯陣列,但它不是真正意義上的陣列。關聯陣列就是將值與特定字串關聯在一起。真正的陣列與字串沒有聯絡,但是它將值和非負整數的下標關聯在一起。
console.log(o["x"]);  //返回1,使用點語法存取屬性
console.log(a[0]);  //返回1,使用中括號存取屬性
使用點語法存取屬性時,屬性名是識別符號;而使用中括號存取屬性時,屬性名為字串。

範例2

當用點號運算子來存取物件屬性時,屬性名是用識別符號表示的;當用中括號來存取物件屬性時,屬性名是用字串表示的,因此可以在執行過程中動態生成字串。
var o = {
    p1 : 1,
    p2 : true
}
for (var i = 1; i < 3; i ++) {
    console.log(o["p" + i]);
}
通過關聯陣列法存取帶有字串表示式的物件屬性是非常靈活的。當物件屬性非常多時,使用點語法來存取物件屬性會比較麻煩。另外,在一些特殊情況下只能使用關聯陣列形式來存取物件屬性。