声明 JavaScript 数组时,“”和“[]”有啥区别?

Posted

技术标签:

【中文标题】声明 JavaScript 数组时,“”和“[]”有啥区别?【英文标题】:What’s the difference between “” and “[]” while declaring a JavaScript array?声明 JavaScript 数组时,“”和“[]”有什么区别? 【发布时间】:2016-02-04 12:54:34 【问题描述】:

声明 javascript 数组时,“”和“[]”有什么区别? 通常我声明喜欢

var a=[];

数组声明为var a=是什么意思

【问题讨论】:

var a = ; 是一个对象-键-值对。 var a = []; 是存储在顺序索引中的数组值。 您在使用 时不是在创建数组,而是在创建object 确切的问题是什么? objectarray 的区别?你想做什么?添加更多代码 我想知道 [] 和 声明之间的区别,我得到了你的答案@Tushar 答案是 [] 声明了不同的东西,如 dup 中所述。 不是数组。 【参考方案1】:

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

[] 正在声明一个数组。

正在声明一个对象。

数组具有对象的所有特性和附加特性(您可以将数组视为对象的子类),其中在 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],使用后一种语法,您可以使用包含 Javascript 在x.foo 语法中不允许使用的字符的属性名称。

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


数组是一个对象,因此它具有对象的所有相同功能,以及一系列用于管理 有序顺序编号索引列表的附加功能0 并达到一定的长度。数组通常用于按数字索引访问的有序项目列表。而且,由于数组是有序的,因此有许多有用的功能可以管理列表.sort() 的顺序或从列表中添加或删除内容。

【讨论】:

为什么[].可以,.不行? @SurajJain - 我不明白它的上下文。也许您应该编写自己的问题并解释您正在尝试做的事情的整体背景。 实际上,我们可以使用空数组字面量(如 [].splice 等)对数组做任何我们可以做的事情,但使用空对象字面量 我们不是,就像我做 @987654341 一样@it 出错了,为什么会这样? @SurajJain - 它可能与上下文中的语言语法有关,因为 也表示一个新块,因此您不能使用它来表示上下文中的对象,它可能意味着新块或其含义可能不明确的地方。你可以做let val = value: true.hasOwnProperty("value"); console.log(val); 是的,可能是这样,它也意味着一个新的块。感谢您的澄清。【参考方案2】:

当你声明时

var a=[];

您正在声明一个空数组。

但是当你声明时

var a=;

你正在声明一个对象。

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

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

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

并且可以访问类似的值

console.log(a.name);

【讨论】:

感谢您的回答@Mytri 如何创建实例和访问键值对 一个小示例代码对我非常有用@Tushar 示例很有用@Mytri @Venkat var arr = ['A', 'B']; console.log(arr[0]) // Avar obj = name: 'A', surname: 'B'; console.log(obj.name); // A OR console.log(obj['name'])【参考方案3】:
var a = [];

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

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

var a=

也用于值数组和对象/属性。 例如。

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

【讨论】:

【参考方案4】:

可以这样理解:

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

你也可以理解

var a = ; 等价于var a= new Object();

注意:

当您对集合中元素(相同类型)的顺序感到困扰时,您可以使用数组,否则您可以使用对象。在对象中,不保证顺序。

【讨论】:

那么数组和对象有什么区别呢? @nnnnnn:- 可以参考:What is the difference between an array and an object? @RahulTripathi nnnnnn 表示您还应该解释它们之间的区别以及何时应该使用数组与对象 @nnnnnn, Tushar 无论如何这都是噪音,这不是问题,也不应该是。这是一个单独的答案,应该在一个单独的问题中。 当需要集合中元素的顺序时,您可以使用数组,当顺序不重要时,我们可以使用对象。【参考方案5】:

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

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

正在声明一个新对象: 给定一个对象,其字段具有名称和类型+值, 有些人喜欢将其视为“关联数组”。 但不是数组,在它们的表示中。

您可以阅读更多@This Article

【讨论】:

【参考方案6】:

JSON 语法

对象 = | 成员

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

数组 = [] | [元素]

元素 = 价值 |价值元素

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

【讨论】:

【参考方案7】:

在 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 中的对象就像数组,但“索引”可以是任何字符串。

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

【讨论】:

但在最新的 chrome 和 firefox 版本中array["hi"] = "weird"; array["hi"];// gives output as weird【参考方案8】:

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

- 当我们声明一个空对象时使用它

typeof([ ]) //object
typeof( ) //object

但是如果你跑了

[ ].constructor.name  //Array

所以从这里你会明白它是一个数组,这里数组是基类的名称。 JavaScript Array 类是一个全局对象,用于构建数组,这些数组是高级的、类似列表的对象。

【讨论】:

以上是关于声明 JavaScript 数组时,“”和“[]”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

关于 JavaScript 二维数组和多维数组的定义声明

JavaScript数组

Javascript中的arguments数组对象

JavaScript之 ------ 数组相关知识(轻松玩转js数组)

JavaScript 怎么快速声明一个数组,长度为 100,元素全是 0?

JavaScript:关于数组声明的 If 语句