Javascript - 这个对象定义符号有什么区别?

Jai*_*iro 0 javascript ajax jquery post

我正在尝试将数组传递给jquery的.ajax()函数的数据参数.第一种方法是我制作了这样的二维数组:

var arr = new Array();
for(i in someArray){
      arr[i] = new Array();
  arr[i].lon = "x";
  arr[i].lat = "y";
}
Run Code Online (Sandbox Code Playgroud)

然后我试图通过将此作为数据$阿贾克斯() :

$.ajax({
    data: { vals : arr },
    async: false,
    type: "POST",
    url: "namedb.php",
    dataType: "script",
    success: function(data){
      result = data;
      alert(result);
        }
});
Run Code Online (Sandbox Code Playgroud)

test.php只返回$ _POST的所有值.所以alert()返回:

Array
(
)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将代码更改为:

var arr = new Array();
for(i in someArray){
      arr[i] = new Array();
  arr[i] = { lon: "x", lat: "y" };
}
Run Code Online (Sandbox Code Playgroud)

警报()返回我的预期:

Array
(
    [vals] => Array
        (
            [0] => Array
                (
                    [lat] => "y",
                    [lon] => "x"
                )
            ...
        )
)
Run Code Online (Sandbox Code Playgroud)

我知道这两个方法都初始化了arr的每个元素的变量/属性(或者我错了?).但为什么2方法的表现不同?(对不起,我可以缩短我的问题,但我想我需要解释一下我是如何找到它的).

编辑:我添加了初始化(arr [i] = new Array();).我必须在编辑问题时删除它.但仍然是同样的问题.

Tha*_*hai 5

那是因为你没有初始化数组元素.

var arr = new Array();
for(i in someArray){
  arr[i] = {}; // initialize it!
  arr[i].lon = "x";
  arr[i].lat = "y";
}
Run Code Online (Sandbox Code Playgroud)

实际上,我更喜欢写作

var arr = new Array();
for(i in someArray){
  arr[i] = { lon: "x", lat: "y" };
}
Run Code Online (Sandbox Code Playgroud)

因为我不需要输入arr[i]3次.


for in在数组上使用循环是错误的,你应该使用for循环或jQuery$.each

var arr = [];
for(var i = 0; i < someArray.length; i ++) {
  arr[i] = { lon: "x", lat: "y" };
}
Run Code Online (Sandbox Code Playgroud)

要么

var arr = [];
$.each(someArray, function(i, value) {
  arr[i] = { lon: "x", lat: "y" };
});
Run Code Online (Sandbox Code Playgroud)

使用Array.prototype.push添加的东西到一个数组是比较容易的,因为你不需要知道数组的下一个索引,也与比较arr[arr.length]=something.

var arr = [];
$.each(someArray, function(i, value) {
  arr.push({ lon: "x", lat: "y" });
});
Run Code Online (Sandbox Code Playgroud)

现在你正在做的是从数组中收集数据并将其转换为另一个数组.jQuery已经有了这样做的功能:$.map.

var arr = $.map(someArray, function(value, i) {
  return { lon: "x", lat: "y" };
});
Run Code Online (Sandbox Code Playgroud)

请注意,在使用时$.each,参数是i, value,当您使用时$.map,它们会被切换.