在node.js和socket.io中发送数组时发生错误

我使用socket.io版本0.8.4

我把我的问题归结为以下几点。 我有这样的数据:

data.prop1 = []; data.prop1.push("man"); data.prop2 = []; data.prop2["hey"] = "man"; 

我以这种方式将数据从服务器发送到客户端:

 socket.emit("data", data); 

在客户端,我以这种方式接收数据:

 socket.on("data", function(data){ console.log(data); }); 

奇怪的是:

 data.prop1 = []; data.prop1.push("man"); // This data exists in the client side data object data.prop2 = []; data.prop2["hey"] = "man"; // This data does not exist. 

data.prop2只是客户端的一个空数组。

在prop2中的表单中的json序列化数组中有一个已知的错误?

先谢谢你

编辑:

使用此解决方法解决问题:

 data.prop1 = []; data.prop1.push("man"); data.prop2 = {}; // <= Object instead of array data.prop2["hey"] = "man"; 

ECMA-262关于JSON.stringify

数组的表示只包含零和array.length – 1之间的元素。 命名的属性被排除在string化之外。

数组应该有数字属性名称。 所以当data.prop2转换为JSON(socket.io发送数据时,我想),它不会得到'hey'属性。 如果您想使用非数字属性名称,则应该使用对象而不是数组:

 data.prop1 = []; data.prop1.push("man"); data.prop2 = {}; // Notice we're creating an object, not an array. data.prop2["hey"] = "man"; // Alternatively: data.prop2.hey = "man" 

不幸的是,Javascript并不是真的那样工作。

看看这篇文章 ,大概一半了。 它解释了你试图设置data.prop2的问题[“hey”] =“man”;