声明 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
确切的问题是什么? object 和 array 的区别?你想做什么?添加更多代码
我想知道 [] 和 声明之间的区别,我得到了你的答案@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 @Venkatvar arr = ['A', 'B']; console.log(arr[0]) // A
和 var 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之 ------ 数组相关知识(轻松玩转js数组)