我想也许我错过了一些我现在刚刚接受的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的东西?我错过了什么? 一定是错过某个地方的规格。谢谢。
答案 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"}"