[对象,对象]和数组之间的区别(2)

时间:2017-06-06 21:31:22

标签: javascript arrays

我正在使用AngularJS并尝试将数据发送到我的后端。

我注意到当我的服务中的变量具有此结构test = [Object, Object]时,它会被传递到我的ASP.NET后端中的List<String>,但是我无法将test = Array(2)传递到我的后端。

我在调试时看到格式并在变量上设置断点。

这两者有区别吗?感谢

1 个答案:

答案 0 :(得分: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(包括)之间的整数,则返回一个新的JavaScript数组,其length属性设置为该数字

所以你的第二个案例代码可能是:

var test = Array(2);

...这实际上评估为[undefined,undefined]),但.NET(因此ASP.NET)没有&#34; undefined&#34;的概念。 (与null相比),因此该值不能序列化为JSON(因为JSON不允许undefined值) - 所以这解释了它失败的原因。

如果&#34;空&#34;数组元素在您的应用程序中有意义,您应该使用显式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.