6

我在想也许我错过了一些我现在正在学习的 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"}

有什么不同?我认为 new Object() 是 Microsoft JScript 的东西?我错过了什么?一定在某个地方的规范中遗漏了一些东西。谢谢。

4

5 回答 5

20
a = new Object()

a = []

不等价。但,

a = {}

a = new Object()

是。

于 2011-05-16T17:42:34.283 回答
3

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

于 2011-05-16T17:43:49.617 回答
1

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

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

JSON.stringify(a); // returns value ["test"]
于 2011-05-16T17:42:33.487 回答
1

是的,您正在使用[]定义实际上是一个数组的对象,但取决于您来自的语言可能会令人困惑,因为它不是关联数组。

默认对象都是 key->data 的映射,并用大括号进行实例化{}

如果你做了

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

它应该工作。

于 2011-05-16T17:42:43.213 回答
1

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

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

所以...

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

a = {};
a.name = 'test';
JSON.stringify(a); //"{"name":"test"}"
于 2011-05-16T17:45:13.963 回答