48

我只是在学习 JavaScript,似乎有很多方法可以声明数组。

  1. var myArray = new Array()
  2. var myArray = new Array(3)
  3. var myArray = ["apples", "bananas", "oranges"]
  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?或者这是什么意思?

4

5 回答 5

28

在您的第一个示例中,您正在制作一个空白数组,与var x = []. 第二个示例创建一个大小为 3 的数组(包含所有元素undefined)。第 3 和第 4 个示例是相同的,它们都使用这些元素创建数组。

使用时要小心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]
于 2012-07-09T21:06:06.550 回答
18

首选方法是始终使用带方括号的文字语法;Array与's.不同,它的行为对于任意数量的项目都是可预测的。更重要的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];
}

事实证明, onlyfetchValue(0)是永远需要的,所以程序员放弃了其他元素并破坏了代码,因为它现在返回undefined

var arr = new Array(1);
于 2012-07-09T21:02:00.657 回答
7

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

声明和初始化数组的传统方式如下所示:

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); 
于 2013-07-15T21:46:33.683 回答
7

声明它:

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

要使用它:

document.write("In my shopping basket I have " + myArr[0] + ", " + myArr[1] + ", and " + myArr[2]);
于 2018-04-21T18:28:01.883 回答
0

如果您要创建一个数组,其主要特征是它的长度,而不是每个索引的值,请根据需要定义一个数组var a=Array(length);

例如-

String.prototype.repeat= function(n){
    n= n || 1;
    return Array(n+1).join(this);
}
于 2012-07-09T23:11:05.413 回答