Array(0) 和 array = [] 有啥区别 [重复]

Posted

技术标签:

【中文标题】Array(0) 和 array = [] 有啥区别 [重复]【英文标题】:What is the difference between Array(0) and array = [] [duplicate]Array(0) 和 array = [] 有什么区别 [重复] 【发布时间】:2018-02-13 01:50:30 【问题描述】:

使用 Array(0) 和 array = [] 创建数组有什么区别?

据我所知,两者都是空的 Array 对象。

array
>>> []
Array(0)
>>> []

但是当我比较它们时,它们会返回“假”。

var array = []
array === Array(0)
>>> false

这是怎么回事?

【问题讨论】:

@tkim90,我猜是因为Array(0) 中有一个0,它被认为是第一个元素,而不是空的[],它总是表示空数组? 那是因为[] === [] => false @user273072545345 Array(0) 表示一个空数组,而不是一个以0 作为第一个元素的数组。 【参考方案1】:

据我所知,两者都是空的 Array 对象。

他们是

但是当我比较它们时,它们会返回“假”。

当您在 javascript 中比较两个对象时,您是在测试它们是否是同一个对象,而不是它们是否是相同的对象。

【讨论】:

【参考方案2】:

因为数组是对象,而不是原语:

var x = 5; // primitive
var y = 5; // primitive
console.log(x == y); // True
var x = [5]; // object
var y = [5]; // object
console.log(x == y); // False
var x = '5'; // primitive
var y = '5'; // primitive
console.log(x == y); // True
var x = 0:5; // object
var y = 0:5; // object
console.log(x == y); // False

关于区别,请查看此问题的答案(接受的和第二个):What’s the difference between “Array()” and “[]” while declaring a JavaScript array? 更多关于原语和对象:object vs. primitive

【讨论】:

【参考方案3】:
var p = Array(0); // []
[] var p = []   // []

两者都以相同的方式创建一个空数组。

var p = Array(3); //[undefined, undefined, undefined]

你也可以使用:

var p = [undefined, undefined, undefined];

同样,两者在内部以相同的方式工作,但有不同的用例:

例如。如果你想创建一个包含 n 个元素的数组:

var array = new Array(n) // [undefined * n]

如果您想在创建时初始化数组的值:

var arry = [1,2,3,4];

这里要注意的一点是,您也可以使用 new Array() 创建一个初始化数组:

var p = new Array(1,2,3,4); // [1,2,3,4]

但是当您尝试使用一个初始化值创建一个数组时,它会采用该参数并创建一个该大小的数组:

var p = new Array(4)  // [undefined*4]

【讨论】:

最后一个例子也可以用var a = new Array(1,2,3,4);完成。 是的,如果您想以相同的方式创建一个包含一个元素的数组,您也可以这样做。例如: var p = new Array(4) 这将创建具有 4 个未定义值的数组。 是的,这是有区别的。【参考方案4】:

2个数组(甚至是空的)不能这样比较并且相等。

以下是如何正确比较 2 个数组的答案: How to compare arrays in JavaScript?

【讨论】:

谢谢你的链接,很有帮助

以上是关于Array(0) 和 array = [] 有啥区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Array 和 Observable Array 有啥区别?

在 JavaScript 中,myArray.length = 0 与 myArray = new Array() 有啥区别? [复制]

Java 中 给一个object 赋值属性, 既可以用构造函数的方式,也可以用setXXXX()的方式,而它们之间有啥区

React:使用 array.find 和 array.map 方法设置状态有啥区别? [复制]

std::valarray 和 std::array 有啥区别

Numpy 的 array() 和 asarray() 函数有啥区别?