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

时间:2012-07-09 21:00:11

标签: javascript arrays

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

  1. var myArray = new Array()
  2. var myArray = new Array(3)
  3. var myArray = ["apples", "bananas", "oranges"]
  4. var myArray = [3]
  5. 它们有什么区别,有哪些首选方式?

    根据this website,以下两行非常不同:

    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 个答案:

答案 0 :(得分:12)

在第一个示例中,您正在创建一个空白数组,与执行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]

答案 1 :(得分:10)

首选方法是始终使用带方括号的文字语法;与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);

答案 2 :(得分:6)

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

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

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); 

答案 3 :(得分:2)

宣布:

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

使用它:

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

答案 4 :(得分:0)

如果要创建一个主要特征是长度的数组,而不是每个索引的值,则将数组定义为var a=Array(length);是合适的。

例如 -

String.prototype.repeat= function(n){
    n= n || 1;
    return Array(n+1).join(this);
}