JavaScript中声明数组的方式是什么?

52

我正在学习JavaScript,似乎有多种声明数组的方法:

  1. var myArray = new Array()
  2. var myArray = new Array(3)
  3. var myArray = ["苹果", "香蕉", "橙子"]
  4. var myArray = [3]

它们之间有什么区别,哪种方式更受欢迎呢?

根据这个网站,以下两行代码是非常不同的:

var badArray = new Array(10); // creates an empty Array that's sized for 10 elements
var goodArray= [10];          // creates an Array with 10 as the first element
正如你所看到的,这两行代码执行的是两个完全不同的操作。如果你想要添加多于一个元素,那么"badArray"将会被正确地初始化,因为JavaScript将会聪明地认为你正在初始化数组而不是在声明要添加多少元素。
作者的意思是说,Array(10) 创建了一个恰好包含 10 个元素的数组,而 [10] 则创建了一个大小未定义的数组,其中第 0 个元素为 10。

5
#3是最常见的。你应该阅读Crockford的《JavaScript语言精粹》以建立扎实的基础。 - Mike Robinson
2
请参阅 MDN 上的 Array 文档(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/)。 - sczizzo
1
示例3和示例4是相同的。 - gen_Eric
1
不,他们不是。 - Wolfie
6个回答

34
在您的第一个示例中,您正在创建一个空数组,与执行var x = []相同。第二个示例创建了一个大小为3的数组(其中所有元素都是undefined)。第三个和第四个示例是相同的,它们都创建了具有这些元素的数组。
在使用new Array()时要小心。
var x = new Array(10); // array of size 10, all elements undefined
var y = new Array(10, 5); // array of size 2: [10, 5]

首选方式是使用 [] 语法。

var x = []; // array of size 0
var y = [10] // array of size 1: [1]

var z = []; // array of size 0
z[2] = 12;  // z is now size 3: [undefined, undefined, 12]

19

首选的方法是始终使用带有方括号的文字语法;它的行为对于任意数量的项目都是可预测的,不像Array的行为。此外,Array并不是一个关键字,虽然这不是一个现实情况,但有人很容易覆盖它:

function Array() { return []; }

alert(Array(1, 2, 3)); // An empty alert box

然而,更大的问题是一致性。有人重构代码时可能会遇到这个函数:

function fetchValue(n) {
    var arr = new Array(1, 2, 3);

    return arr[n];
}

事实证明,只需要fetchValue(0),所以程序员删除了其他元素并破坏了代码,因为现在它返回undefined

var arr = new Array(1);

11

声明它:

var myArr = ["apples", "oranges", "bananas"];

使用方法:

document.write("In my shopping basket I have " + myArr[0] + ", " + myArr[1] + ", and " + myArr[2]);

1
这并没有真正回答条目末尾指定的问题。 - P Ackerman

8

有多种方式可以创建数组。

传统的声明和初始化数组的方法如下:

var a = new Array(5); // declare an array "a", of size 5
a = [0, 0, 0, 0, 0];  // initialize each of the array's elements to 0

或者...
// declare and initialize an array in a single statement
var a = new Array(0, 0, 0, 0, 0); 

4
以我之见,这正是“不应该这样做”的反面例子。看看其他的答案。 - hgoebl
3
上述描述的第一种方式并没有达到其所说的效果。实际上,它创建了一个大小为5的数组(所有元素均未定义),将其分配给变量a,然后立即丢弃了该数组,并将一个全新的大小为5的数组分配给变量a,其中每个索引处都存储了零。如果要保留现有的数组并初始化其元素,则需要使用var a = new Array(5);,然后跟随a[0] = 0; a[1] = 0;等等。 - tmcgill
var a = [0, 0, 0, 0, 0]; - FrancescoMM

0
如果您正在创建一个主要特征是其长度而不是每个索引的值的数组,则将数组定义为var a=Array(length);是合适的。
例如-
String.prototype.repeat= function(n){
    n= n || 1;
    return Array(n+1).join(this);
}

-1
你可以这样声明
const [alice, bob] = [1, 2]

console.log(alice) // 1
console.log(bob) // 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接