JSON.stringify()和JavaScript对象

JSON.stringify()和JavaScript对象,javascript,ajax,json,stringify,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"} 有什么区别? 我还以为newobject()是微软的JS

我在想,也许我错过了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"}
有什么区别? 我还以为newobject()是微软的JScript呢?我错过了什么?
一定是在某个地方遗漏了什么。谢谢

对于JSON数据,数组应该有数字索引,对象应该有键/值对

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

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

它们并不等同。但是,

a = {}


是。

是的,您正在使用
[]
定义对象,该对象实际上是一个数组,但根据您所使用的语言,可能会产生混淆,因为它不是关联数组

默认对象是键->数据的所有映射,并用花括号实例化
{}

如果是的话

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

它应该可以工作。

new Object()
相当于
{}
(除非不是因为奇怪的重新定义问题,但现在请忽略这一点)。
[]
相当于
新数组()
,然后向其中添加
.name
属性。JSON以一种特殊的方式对数组进行字符串化,不会捕获对数组本身的任意属性分配。

设置数组的
名称
属性对其序列化(JSON字符串化)形式没有任何影响。它不会将条目放入数组中。为此,您需要
a.push('test')

对象是Javascript的标准部分(例如,请参见)。创建对象的正常方法是使用
{}
,但是
新建对象()
也可以

所以


“我以为new Object()是Microsoft JScript的东西?”不,一点也不。这是标准的JavaScript(虽然很冗长,但只需使用
{}
,这在JScript和其他ECMAScript实现中都很好用)。“…可能会让人困惑,因为它不是关联数组”实际上,它更让人困惑,因为它是一个关联数组和非数字键(属性名)在JavaScript中完全有效,因为。但是如果您将数组转换为JSON,它们将被删除,因为JSON数组表示法不允许使用非数字键(有很好的理由,很少有语言支持它们)。谢谢我觉得我现在得到了“每日愚蠢问题奖”。
a = {}
a = new Object()
a = {};
a.name = "test";
JSON.stringify(a); 
var a = [];
a.push('test');
JSON.stringify(a); //"["test"]"

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