2012-11-27 69 views
1

當我將一個變量聲明爲一個數組或對象,然後向其中添加元素時,我注意到有所不同。Javascript關聯數組在變量聲明上有所不同

當我宣佈我的變量如下:

var my_array = []; 
my_array["a"] = 'first'; 
my_array["b"] = 'second'; 
console.log(my_array); 

我得到以下結果:

[a: "first", b: "second"] 

然而,當我做到以下幾點:

var my_array = {}; 
my_array["a"] = 'first'; 
my_array["b"] = 'second'; 
console.log(my_array); 

這是結果我得到:

Object {a: "first", b: "second"} 

這裏究竟發生了什麼?是單向標準,而另一個不是?!兼容性有什麼缺點?!

在此先感謝。

P.S.我正在使用Google Chrome。

+0

位於'toString'方法中的差異。而已。 – Damask

+0

嘗試'console.log(my_array.length);'都在... –

回答

2

第一個是數組,secound是一個對象,如果你需要使用數組,數組將比使用「數組」對象更有用且更有效。

進一步的目的,可以使用這樣的: myObject.a

雖然陣列可以是像這樣使用:myArray["a"]

另一個diffrence處於toString方法。對於數組,它將返回Banana,Orange,Apple,Mango(例如),對於它返回[object Object](例如)的對象。

對於進一步閱讀:What is the difference between an array and an object?

檢查是否數組:

function isArray(obj) { 
    return Object.prototype.toString.call(obj) === "[object Array]"; 
} 
+0

謝謝。我試圖找到一種在代碼中區分兩者的方法,我該怎麼做?我可以使用toString來測試哪一個返回一個字符串,而不是一個對象?! –

+0

我編輯了我的答案 –

+0

非常感謝。那樣做了。 –

0

他們是兩個不同的對象。 我使用第二個用於JSON響應,第一個用於代碼中的正常使用。