2015-01-09 40 views
0

在小提琴 - http://jsfiddle.net/vwwkf18c/或下面的代碼片段 -Javascript - 數組如何在內部存儲?

var a = [3, 4]; 
var b = [6, 2]; 
var c = $.extend({}, a, b); 
alert(c[1]); //alerts 2 
alert(a); //alerts array a contents 
alert(c); //does not return contents of c 

我的問題 - 1)什麼被驚動後,我們可以推斷,「C」是一個對象,但不是一個數組對象。請確認。 2)其次,據說數組的內部表示是一個對象字面值,對嗎? 這意味着陣列「一」將被存儲下面給出 -

var a = { 
0: 3, 
1: 4 
} 

是不是? 3)a或b如何在內部存儲,它與「c」的內部表示有什麼不同?

+0

$ .extend是一個jquery函數,希望將類型Object合併在一起.... – 2015-01-09 19:22:44

+4

'alert'不是一個調試工具,如果您學習使用控制檯,它會更清楚地顯示出事情。 '$ .extend'創建對象。 – adeneo 2015-01-09 19:22:50

+0

在這種情況下,'c'現在是:'Object {0:6,1:2}'。話雖如此,這個問題並不是真正適合SO的。你有一個特定的編程問題或只是理論的東西? – 2015-01-09 19:23:55

回答

1
  1. 參見the docs:「返回:對象」
  2. 號的對象常量是用於與創建對象一塊的JavaScript 語法的。數組是從基本對象繼承(沿原型鏈)的對象類型。數組類型與基本對象有不同的toString方法,這就是爲什麼alert給出不同的結果。
  3. 即實現特定的(而且也沒有重視,任何人編寫JavaScript而不是JavaScript運行)
+0

推論#2:JS數組是對象。數組有一個允許數字索引的語法,純粹的對象不會。可能是Array實際上有字段arr.0,arr.1,arr.2等。,但正如#3所指出的那樣,它依賴於實現,你不應該在那裏。不建議使用jQuery擴展數組。 – user1329482 2015-01-09 19:57:56

0
  1. 是的,C是一個對象,而不是一個數組。
  2. (它是一個數組)的內部表示除'0'和'1'之外還有一個名爲'length'的屬性。
  3. c具有'0'和'1'屬性,但不是財產 '長度'

退房this jsfiddle

var a = [3, 4]; 

var b = [6, 2]; 

var c = $.extend({}, a, b); 

alert(c[1]); //alerts 2 
alert(a); //alerts array a contents 
alert(Object.getOwnPropertyNames(c)); //does not return contents of c 
alert(Object.getOwnPropertyNames(a)); 

希望這是有幫助的

維克拉姆