2017-06-06 87 views
-1

我在AngularJS中工作,並試圖將數據發送到我的後端。[Object,Object]和Array之間的區別(2)

我注意到,當我在服務變量具有這種結構test = [Object, Object]它被傳遞到我的ASP.NET後臺一個List<String>,但我已經通過test = Array(2)到我的後端麻煩。

我看到我正在調試的格式,並在變量上設置斷點。

這兩者之間有區別嗎?由於

+0

你想在這裏做什麼?只需初始化長度爲== 2的數組? – sethro

+0

顯然,一個包含兩個函數,而另一個不包含任何內容。 – Bergi

+0

請顯示您的真實代碼並顯示您的[實際問題](https://meta.stackexchange.com/q/66377)。 – Bergi

回答

3

第一種情況:

var x = { foo: "bar", qux: 123 }; 
var y = { baz: "123", yeen: { arr: [1,2,3] }; 

var test = [ x, y ]; // [Object,Object] 

對於第二種情況,請參閱MDN的文檔Array()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

new Array(arrayLength) 

如果唯一的參數傳遞給Array構造函數是0到2^32 - 1(含)之間的整數,這會返回一個新的J avaScript數組的長度屬性設置爲數字

所以你的第二個案例代碼大概是:

var test = Array(2); 

...這實際上計算結果爲[undefined,undefined]),但是.NET(因此ASP.NET)沒有「undefined」的概念(與null比較),所以此值不能序列化爲JSON(因爲JSON不允許undefined值) - 所以這解釋了爲什麼它失敗。

如果一個「空」數組元素在你的應用程序有意義的,你應該使用明確的null值而不是 - 最好是使用數組字面像這樣:

var ret = [ null, null ]; 

或者,如果要素的數量是可變的:

var ret = Array(123); // This creates a 123-sized array, where every element is undefined. This cannot be serialized to JSON 
ret.fill(null);  // This explicitly sets every element to a null value. The array can now be serialized to JSON. 
+0

謝謝@戴,我能夠跟蹤它,發現ASP.NET正在放棄一些空陣列,所以它給了我錯誤。 – inhaler

+0

'Array(2)'的數組文字等價於'[,,]'。 ;-) – RobG

+0

@RobG好的 - 我修改了我的答案。 – Dai

相關問題