0

Well I have always used

var j= {};
j['field'] = value;

Apparently below works too

var j= [];
j['field'] = value;

Any difference?

Edit: Sorry I guess I used the wrong word json here instead of object. My bad. But my questions till stands. Most people are explaining the difference between an array and object to me which I am familiar with.

I always do var x = []; x.push('blah') etc.

I also do var x = {}; x.Name = 'Michael'; x.Age = 21 etc.

What I was surprised to see and what prompted me to ask this is I saw code that goes like var x = []; x.name = 'Michael';

This is something I wasn't used to and hence posted the question.

Thanks for all the answers. I have marked accepted answer which addressed my question the best

4

7 回答 7

9

您的对象不是“JSON”,它们是(空)对象和数组文字。JSON 是通过传递JSON.stringify.

如果您尝试将其转换为 JSON,则后者将不起作用,即使它是合法的 JavaScript:

var json = [];             // ok, it's an array
json["field"] = "value";   // still OK - arrays can have properties too
JSON.stringify(json);
> "[]"

即,您只得到一个空数组,因为当您尝试序列化数组时,您只能从to中取出数字索引的属性,而不是命名属性。0myArray.length - 1

于 2013-06-04T15:42:14.323 回答
3

[] 是一个数组初始化器

{} 是一个对象初始化器

于 2013-06-04T15:39:13.683 回答
3
  • []是一个零长度数组文字。

  • {}是一个空对象字面量。

于 2013-06-04T15:39:27.523 回答
1

下面是一个javascript对象,

var json = {};
json['field'] = value; //Valid

下面是一个javascript数组,

var json = [];
//Below does not set the value in array instead it sets a property name field.
//json['field'] = value; 
json.push(value);      //proper way to add an element to an array

两者都是 Javascript 对象,与 JSON 无关。

JSON 是一种表示法,一种跨不同语言遵循的约定,以便于数据通信。基本上,上述内容将转换为遵循 JSON 约定的字符串文字,可以跨不同语言读取。

有两种方法,

  1. JSON.stringify- 按照 JSON 表示法将上述内容转换为字符串文字。
  2. JSON.parse - 将 JSON 字符串文字转换为有效的 javascript 对象。

相同的功能可作为大多数语言的库使用,使您可以轻松地跨不同语言进行交流。

于 2013-06-04T15:43:33.063 回答
1

[]创建一个Array实例(这是一个具有某些附加属性/方法的对象实例),{}一个Object实例。

使用创建的一个[]将具有来自Array原型的方法,例如等push()slice()而第二个则没有。

于 2013-06-04T15:40:45.113 回答
1

[]是数组,{}是文字对象。

您可以同时做这两件事,因为它们都是 JavaScript 原始对象。

当您在数组中执行此操作时,您是在数组 object中设置一个属性,而不是向其中添加项目。
当您在文字对象中执行此操作时......好吧,如上所述,您正在该对象中设置一个属性。

于 2013-06-04T15:42:28.843 回答
1

没有区别。

在这两种情况下,您都是在对象上设置属性。只是第二个对象是一个数组。

换句话说,在您的后一个示例中,您有效地使用了您在前一个示例中使用的相同技术,也就是说,您正在为一个对象设置一个属性。在这种情况下,一个数组。但是您并没有更改数组的内容。

于 2013-06-04T15:43:18.150 回答