【问题标题】:What is the way of declaring an array in JavaScript?在 JavaScript 中声明数组的方式是什么?
【发布时间】:2012-07-09 21:00:10
【问题描述】:

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

  1. var myArray = new Array()
  2. var myArray = new Array(3)
  3. var myArray = ["apples", "bananas", "oranges"]
  4. var myArray = [3]

它们有什么区别,首选的方式是什么?

根据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 的数组?或者这是什么意思?

【问题讨论】:

  • #3 是最常见的。您应该阅读 Crockford 的“Javascript: The Good Parts”以获得真正坚实的基础。
  • 例3和例4相同。
  • 不@Rocket,他们不是。

标签: javascript arrays


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

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

      声明它:

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

      使用它:

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

      【讨论】:

      • 这并没有真正回答条目末尾指定的问题。
      【解决方案5】:

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

      例如-

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

      【讨论】:

        猜你喜欢
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        相关资源
        最近更新 更多