Ajax /套接字:javascript数组对象的属性丢失

在Javascript中,数组[]也可以具有属性,因为它是一个对象。 但是,如果您通过ajax / socket.io将此对象发送到服务器,则数组内容保留,但其属性会丢失。

例如:

var arr = ['john','peter']; arr.a = 1; console.log(arr.a); // 1 

在通过ajax发送这个对象之后,服务器看到的是:

 console.log(arr.a); // undefined 

有谁知道为什么? 我使用Node.JS服务器btw,谢谢!

正如其他人所说,JSON.stringify()不会序列化数组属性,即使它们不是从原型“inheritance”。

如果你使用的是jQuery,一个简单的解决方法就是使用$ .extend({},arr) http://jsfiddle.net/15vn4shu/1/

如果不是的话,你可以写一个函数来轻松地转换成一个对象:

 function convertArrToObj(arr){ //assuming typeof arr === 'object', put in guards if needed var obj = {}; for (var key in arr){ if (arr.hasOwnProperty(key)) obj[key]=arr[key]; } return obj; } 

就个人而言,我只是用一个属性作为这个数组的值的对象,无论你需要添加到这个父对象。 但我不确定这在你的用例中是多么的可行(我必须看代码)。

 var toSend = {data:arr, customProp:'value'}; 

简单,所有版本的js都支持,不需要框架,也不需要O(n)来执行转换(arr是一个指针…这可能是一个陷阱,但它看起来不像它为你的情况)。