2017-06-06 85 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

相关问题