使用[]初始化javascript变量和使用{}初始化变量有区别吗?

Is there a difference in Initializing javascript variable using [] versus {}

本文关键字:变量 初始化 有区别 javascript 使用      更新时间:2023-09-26

我一直用

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

显然下面也可以

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

什么不同吗?

编辑:对不起,我想我在这里使用了错误的单词json而不是对象。我的坏。但我的问题依然存在。大多数人都在向我解释我所熟悉的数组和对象之间的区别。

我总是做var x = [];x.push("废话")等。

我也做var x = {};x.Name = 'Michael';x.年龄= 21岁等

让我惊讶的是,我看到的代码是这样的Var x = [];x.name = 'Michael';

这是我不习惯的事情,因此发布了这个问题。

谢谢你的回答。我已标记了最能回答我的问题的公认答案

你的对象不是"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);
> "[]"

。你只是得到一个空数组,因为当你试图序列化一个数组时,你只得到从0myArray.length - 1数字索引属性,而不是命名属性。

[]是数组初始化式

{}是一个对象初始化式

  • []是一个零长度数组字面值

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

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

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

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

你可以同时做这两件事,因为它们都是JavaScript的基本对象。

当你在数组中这样做时,你是在数组对象中设置一个属性,而不是向它添加一个项。
当你在字面对象中这样做时…正如上面所说,你在那个对象中设置了一个属性

没有区别。

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

换句话说,在后一个示例中,您有效地使用了与前一个示例中相同的技术,即在对象上设置属性。在本例中,是一个数组。但是你并没有改变数组的内容

下面是一个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对象。

相同的函数在大多数语言中都可以作为库使用,这使得您可以轻松地跨语言进行通信。