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

Cel*_*tas 33 javascript arrays

我只是学习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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这两条线做了两件完全不同的事情.如果您想添加多个项目,那么badArray将被正确初始化,因为Javascript会足够聪明地知道您正在初始化数组而不是说明您想要添加多少元素.

作者试图说的是Array(10)创建一个精确有10个元素[10]的数组,并创建一个未定义大小的数组,第0个元素是10?或者这是什么意思?

Roc*_*mat 15

在您的第一个示例中,您正在创建一个空白数组,与执行相同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]
Run Code Online (Sandbox Code Playgroud)

首选方法是使用[]语法.

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]
Run Code Online (Sandbox Code Playgroud)


小智 11

首选方法是始终使用带方括号的文字语法; 它的行为可以预测任何数量的项目,不像Array's.更重要的Array是,它不是一个关键字,虽然它不是一个现实的情况,但有人可以轻易地覆盖它:

function Array() { return []; }

alert(Array(1, 2, 3)); // An empty alert box
Run Code Online (Sandbox Code Playgroud)

但是,更大的问题是一致性问题.有人重构代码可能遇到这个函数:

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

    return arr[n];
}
Run Code Online (Sandbox Code Playgroud)

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

var arr = new Array(1);
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)

要么...

// declare and initialize an array in a single statement
var a = new Array(0, 0, 0, 0, 0); 
Run Code Online (Sandbox Code Playgroud)

  • 上面描述的第一种方法并不像它所说的那样做。它实际上创建了一个大小为 5 的数组(所有元素未定义),将其分配给变量“a”,然后立即丢弃该数组并将另一个大小为 5 的全新数组(带有零)分配给变量“a”存储在每个索引处。要保留现有数组并初始化其元素,需要的是“var a = new Array(5);”,然后是“a[0] = 0;” a[1] = 0;`等 (3认同)
  • 恕我直言,这正是**不这样做**的方式。看看其他答案。 (2认同)

小智 6

声明它:

var myArr = ["apples", "oranges", "bananas"];
Run Code Online (Sandbox Code Playgroud)

要使用它:

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