在声明JavaScript数组时,“{}”和“[]”有什么区别? 通常我会像这样声明:
var a=[];
将数组声明为var a={}
的含义是什么?
在声明JavaScript数组时,“{}”和“[]”有什么区别? 通常我会像这样声明:
var a=[];
将数组声明为var a={}
的含义是什么?
似乎没有人解释数组和对象之间的区别。
[]
表示声明一个数组。
{}
表示声明一个对象。
数组具有对象的所有特性,并额外拥有一些功能(可以将数组视为对象的子类),其中额外的方法和功能添加在Array子类中。实际上,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]
。同时,使用后一种语法,您可以使用在x.foo
语法中JavaScript不允许的字符作为属性名。
属性名可以是任何字符串值。
数组是一个对象,因此它具有与对象相同的所有功能,还有一堆额外的功能用于管理有序、连续的从0
开始到某个长度的编号索引列表。数组通常用于按数字索引访问的有序列表项。由于数组是有序的,因此有许多有用的功能来管理列表的顺序,例如.sort()
或向列表中添加或删除内容。
[].
但不能使用{}.
? - Suraj Jain[]
来执行任何可以使用数组执行的操作,例如[].splice
等。但是,如果我们使用空对象字面量{}
,就不能这样做,例如如果我执行{}.hasOwnProperty
,它会报错,为什么呢? - Suraj Jain{}
也表示一个新块,所以您不能在可能意味着新块或其含义可能不明确的上下文中使用它来表示对象。您可以执行 let val = {value: true}.hasOwnProperty("value"); console.log(val);
。 - jfriend00({}).hasOwnProperty()
@SurajJain - criver.to当你声明
var a=[];
您正在声明一个空数组。
但是当您进行声明时
var a={};
你正在声明一个对象。
虽然在JavaScript中Array也是一个对象,但它是由数字键配对的值组成的。 它具有对象的所有功能,但添加了一些像Push,Splice,Length等数组特有的方法。
因此,如果您需要使用数字键来存储某些值,请使用Array。 否则,请使用对象。 您可以像这样创建对象:
var a={name:"abc",age:"14"};
并且可以访问像
console.log(a.name);
var arr = ['A', 'B']; console.log(arr[0]) // A
和 var obj = { name: 'A', surname: 'B'}; console.log(obj.name); // A 或者 console.log(obj['name'])
- Tusharvar a = [];
它用于简单值数组的括号。 例如:
var name=["a","b","c"]
var a={}
它用于值数组和对象/属性。
例如:var programmer = { 'name':'special', 'url':'www.google.com'}
var a= []; //creates a new empty array
var a= {}; //creates a new empty object
var a = {};
等同于 var a = new Object();
注意:[]
声明一个数组:
给定,由数字索引持有的元素列表。
{}
声明一个新对象:
给定,具有名称和类型+值字段的对象,
有些人喜欢将其视为“关联数组”。
但在它们的表示中并不是数组。JSON语法
对象 = {} | { 成员 }
数组 = [] | [ 元素 ]
值 = 字符串|数字|对象|数组|true|false|null
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!
new Array()
创建数组)。结果,数组中的每个索引都被转换为字符串并存储在对象中,因此数组只是一个不允许任何人使用不是正整数的键存储任何内容的对象。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
array["hi"] = "weird"; array["hi"]; //输出为weird
。 - AyushKatiyar[ ]
- 当我们声明一个空数组时使用此符号。
{ }
- 当我们声明一个空对象时使用此符号。
typeof([ ]) //object
typeof({ }) //object
但如果你运行
[ ].constructor.name //Array
因此,从这里你可以理解这是一个数组,Array是基类的名称。 JavaScript的Array类是一个全局对象,用于构建高级别、类似列表的对象。
var a = {};
表示一个包含键值对的对象。var a = [];
表示一个按顺序存储值的数组,每个值都有一个索引号。 - Tushar[]
和{}
在声明时表示不同的内容,正如在 dup.. 所描述的。{}
不是一个数组。 - jfriend00