JSON.stringify()和JavaScript对象

时间:2011-05-16 17:39:49

标签: javascript ajax json stringify

我想也许我错过了一些我现在刚刚接受的JavaScript。

我在Chrome控制台中尝试了此代码:

a = [];
a.name = "test";
JSON.stringify(a); 
// which returns value []
a = new Object();
a.name = "test";
JSON.stringify(a); 
// which returns value {"name":"test"}

有什么区别? 我以为新的Object()是Microsoft JScript的东西?我错过了什么? 一定是错过某个地方的规格。谢谢。

5 个答案:

答案 0 :(得分:20)

a = new Object()

a = []

不等同。但是,

a = {}

a = new Object()

答案 1 :(得分:3)

new Object()相当于{}(除非是因为奇怪的重新定义问题 - 但暂时忽略了这一点。)[]相当于new Array(),然后你要添加一个.name属性。 JSON以特殊方式对数组进行字符串化,不会捕获对数组本身的任意属性。

答案 2 :(得分:1)

对于JSON数据,数组意味着具有数字索引,而对象具有键/值对。

a = [];
a[ 0 ] = "test";

JSON.stringify(a); // returns value ["test"]

答案 3 :(得分:1)

是的,您使用[]来定义实际上是数组的对象,但是根据您来自的语言可能会造成混淆,因为它不是关联数组。

默认对象是key->数据的所有地图,并使用大括号{}实例化

如果你做了

a = {};
a.name = "test";
JSON.stringify(a); 

它应该有用。

答案 4 :(得分:1)

设置数组的name属性对其序列化(JSON字符串化)表单没有任何作用。它没有在数组中放入一个条目。为此,您需要a.push('test')

对象是Javascript的标准部分(例如,参见MDC docs)。创建对象的常规方法是使用{},但new Object()也适用。

因此...

var a = [];
a.push('test');
JSON.stringify(a); //"["test"]"

a = {};
a.name = 'test';
JSON.stringify(a); //"{"name":"test"}"