声明 JavaScript 数组时,“{}”和“[]”有什么区别?

What’s the difference between “{}” and “[]” while declaring a JavaScript array?

声明JavaScript数组时,“{}”和“[]”有什么区别? 通常我声明像

var a=[];

数组声明为var a={}

是什么意思

当你声明时

var a=[];

您正在声明一个空数组。

但是当你在声明的时候

var a={};

您正在声明一个对象。

虽然Array在Javascript中也是Object,但它是数字键对值。 它具有对象的所有功能,但增加了一些数组的方法,如Push、Splice、Length等。

所以如果你想要一些需要使用数字键的值,请使用数组。 否则使用对象。 您可以像这样创建对象:

var a={name:"abc",age:"14"}; 

并且可以访问像

这样的值
console.log(a.name);

可以这样理解:

var a= []; //creates a new empty array
var a= {}; //creates a new empty object

你也可以这么理解

var a = {}; 等同于 var a= new Object();

注:

当您担心集合中元素(相同类型)的顺序时,您可以使用数组,否则您可以使用对象。对象中的顺序无法保证。

它们是两个不同的东西..

[] 正在声明一个数组:
给定,由数字索引保存的元素列表。

{} 正在声明一个新对象:
给定,一个包含名称和类型+值的字段的对象,
有些人喜欢将其视为 "Associative Array"。 但在它们的表示中不是数组。

你可以阅读更多@This Article

似乎没有人解释数组和对象之间的区别。

[] 正在声明一个数组。

{} 正在声明一个对象。

数组具有对象的所有特性以及附加特性(您可以将数组想象成对象的子class),其中在数组子[中添加了额外的方法和功能=49=]。事实上,typeof [] === "object"进一步向你展示了数组是一个对象。

附加功能包括跟踪数组中项目数量的魔法 .length 属性 和一系列用于操作数组的方法,例如 .push(), .pop(), .slice(), .splice(), 等等...可以看到数组方法列表here.

对象使您能够将 属性 名称与值相关联,如:

var x = {};
x.foo = 3;
x["whatever"] = 10;
console.log(x.foo);      // shows 3
console.log(x.whatever); // shows 10

可以通过 x.foo 语法或类似数组的语法 x["foo"] 访问对象属性。后一种语法的优点是您可以使用变量作为 属性 名称,如 x[myvar] 并使用后一种语法,您可以使用包含 [=51= 字符的 属性 名称] 不允许使用 x.foo 语法。

A 属性 名称可以是任何字符串值。


数组是一个对象,因此它具有与对象相同的所有功能,外加一系列用于管理 有序顺序[=47] 的附加功能=] 编号索引列表,从 0 开始并达到一定长度。数组通常用于按数字索引访问的有序项目列表。而且,因为数组是有序的,所以有很多有用的功能来管理列表的顺序 .sort() 或者在列表中添加或删除内容。

JSON

的语法

对象 = {} | { 成员 }

  • 成员 = 对 |对,成员
  • 对=字符串:值

数组 = [] | [ 元素 ]

  • 元素=值|值元素

价值= 字符串|数字|对象|数组|真|假|空

var a = [];

它用于简单值数组的括号。 例如

var name=["a","b","c"]

var a={}

用于值数组,objects/properties 也用于。 例如

var programmer = { 'name':'special', 'url':'www.google.com'}

在 JavaScript 中,数组和对象实际上非常相似,尽管从外表上看它们可能有点不同。

对于数组:

var array = [];
array[0] = "hello";
array[1] = 5498;
array[536] = new Date();

如您所见,JavaScript 中的数组可以是稀疏的(有效索引不必是连续的)并且它们可以包含 任何 类型的变量!挺方便的。

但众所周知 JavaScript 很奇怪,所以这里有一些奇怪的地方:

array["0"] === "hello"; // This is true
array["hi"]; // undefined
array["hi"] = "weird"; // works but does not save any data to array
array["hi"]; // still undefined!

这是因为 JavaScript 中的所有内容都是对象(这就是为什么您也可以使用 new Array() 创建数组)。结果,数组中的每个索引都变成了一个字符串,然后存储在一个对象中,因此数组只是一个对象,不允许任何人使用非正整数的键存储任何内容。

那么什么是对象?

JavaScript 中的对象就像数组,但 "index" 可以是任何字符串。

var object = {};
object[0] = "hello"; // OK
object["hi"] = "not weird"; // OK

您甚至可以选择在处理对象时不使用方括号!

console.log(object.hi); // Prints 'not weird'
object.hi = "overwriting 'not weird'";

您可以更进一步,像这样定义对象:

var newObject = {
    a: 2,
};
newObject.a === 2; // true

[ ] - 每当我们声明一个空数组时都会使用它,

{ } - 每当我们声明一个空对象时都会使用它

typeof([ ]) //object
typeof({ }) //object

但是如果你的运行

[ ].constructor.name  //Array

所以从这里,你就会明白这里是一个数组 Array 是基数的名字class。 JavaScript 数组 class 是一个全局对象,用于构造类似于列表的高级对象的数组。