javascript中對象和數組的異同點

 

1、JS聲明對象或數組  JS對象:{ }  JS數組:[ ]javascript

 

對象       var b={m:'123',n:'abc'};alert(b.m);alert(b.n);java

 

一維數組     var a=[1,2,3];alert(a[1]);alert(a.length);
二維數組     var ar = [ [ 'a' , 'b'],[ 4, 5 , 6 , 5 ],[ 7, 8 , 9 ] ];alert(ar[1].length);數組

 

對象跟數組結合  var b={m:[{f:'123'},{g:'abc'}],n:[{h:'456'},{u:'098'}]};alert(b.m[0].f);spa

 

數組跟對象結合  var b=[{m:'abc',n:'fff'},{x:'123',y:'555'}];alert(b[1].x);code

 

2、數組」(array)和「對象」(object)二者均可以用來表示數據的集合。對象

 

在javascript中,對象被定義爲屬性和值的集合。最直接的表現即是對象字面量:var obj={a:3,b:"hello",c:[1,2,3]}。相比傳統的面向對象的語言,這種方式大大簡化的對象建立。在這種狀況下,javascript的對象其實就是一個關聯數組。在javascript中,數組又能夠認爲是索引數組,便可以用整數來進行索引。數組和對象在這種狀況下很是接近。blog

好比數組a=[1,2,3,4],和對象a={0:1,1:2,2:3,3:4},運行alert(a[1])兩種結果是相同的。索引

這就是說,數據集合既能夠用數組表示,也能夠用對象表示,那麼我到底該用哪種呢?ip

數組和對象的區別:字符串

(1)數組表示有序數據的集合,而對象表示無序數據的集合。——若是數據的順序很重要,就用數組,不然就用對象。

(2)數組的數據沒有」名稱」(name),對象的數據有」名稱」(name)

可是:數組分爲索引數組(下標爲整數數字)和關聯數組(下標爲文本)。

例如在javascript中,能夠這樣定義一個對象:var a={"城市":"北京","面積":16800,"人口":1600};
可是,也能夠定義成一個關聯數組:
          a["城市"]="北京";
          a["面積"]=16800;
           a["人口"]=1600;

因而:在Javascript語言中,關聯數組就是對象,對象就是關聯數組。

所以,在javascript中,數組是一種特殊的對象,其除了具備通常對象的一些屬性和方法外,還具備一些專屬於數組的屬性和方法:push,pop等。

當使用typeof判斷數組類型時其會返回object。一個比較直觀的方法能夠說明對象和數組之間的關係:

var a=[1,2,3,4];a["pro"]="hello";alert(a.length);//4

在這種狀況下,數組a的長度不變,pro是a這個對象的屬性而不是其元素。因爲在javascript中,對象的屬性能夠用點號和中括號來引用,而數組的元素使用中括號來引用,所以會形成誤解。

 

總結:

區別:

(1)建立方式不一樣:數組表示有序數據的集合,而對象表示無序數據的集合。數組的數據沒有」名稱」(name),對象的數據有」名稱」(name)。

var arr = [11,22,33,44,55];
var obj = {
    attr1:'01',
    attr2:'02',
    attr3:'03',
    attr4:'04',
    attr5:'05'
}

(2)調用方法不一樣

 對象的屬性能夠用點號和中括號(注意中括號內是字符串表達式,要加引號)來引用,而數組的元素使用中括號來引用

console.dir(arr[1]);
console.dir(obj.attr1);
console.dir(obj['attr1']);

(3)對象鍵值惟一,數組能夠重複

var arr = [11,11,33,44,55];
var obj = {
        attr1:'01',
        attr2:'02',
        attr3:'03',
        attr4:'04',
        attr5:'05',
        attr1:"00"
  }
console.dir(arr);
console.dir(obj);

(4)對象沒有長度,不能用for循環

    // 對象沒有長度    
    console.dir(arr.length);   // 5
    console.dir(obj.length);   // undefined

    for (var i = 0; i <arr.length; i++) {
        console.dir(arr[i]);
     }

相同點:

(1)數組和對象均可以使用for...in 循環

for(var index in arr){
    console.dir(index);          // 屬性
    console.dir(arr[index]);    //
}
for(var attr in obj){
     console.dir(attr);          // 屬性
     console.dir(obj[attr]);    //
}        
相關文章
相關標籤/搜索