【问题标题】:Javascript new keyword .length not workingJavascript新关键字.length不起作用
【发布时间】:2017-12-24 16:59:59
【问题描述】:

希望有人能对这段没有按预期工作的简单代码有所了解:

var arr = new Array(10);
arr.length; // 10. Why? Very wierd.

为什么返回 10?

【问题讨论】:

  • 什么没有按预期工作?这正是正确的行为,根据documentation....
  • 哪里不行?

标签: javascript arrays variable-length


【解决方案1】:

你用十个元素实例化了数组

【讨论】:

    【解决方案2】:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

    如果传递给 Array 构造函数的唯一参数是整数 在 0 和 232-1(含)之间,这将返回一个新的 JavaScript 数组 其长度属性设置为该数字

    因此,使用new 关键字创建一个只有一个数字元素的新数组是不可能的。

    你可以这样做:

    var arr = [10]; // Creates a new array with one element (the number 10)
    console.log(arr.length); // displays 1 because the array contains one element.

    【讨论】:

    • 这是正确的答案。语法因您要执行的操作而异,例如var arr = new Array(arrayLength)var arr = [item1, item2, etc]
    【解决方案3】:

    我创建了一个包含 10 个单元格的数组...所以它返回 10 :)

    你想做的事:

    var arr = [10]
    

    【讨论】:

    • 但我只想使用 new 关键字输入 10 的 1 个整数。我做错了吗?
    • 是的。你传入的10指定了初始化时数组的长度
    【解决方案4】:

    它返回 10,因为您只将一个整数作为参数提供给 Array 构造函数。在这种情况下,新的 Array 构造函数就像某些编程语言一样,您需要为数组指定内存,这样您就不会得到那些 ArrayIndexOutOfBounds 异常。 Java 中的一个例子:

    int[] a = new int[10];
    

    或 C#:

    int[] array = new int[5];
    

    在 Javascript 中,当你编写时:

    var a = new Array(10);
    a[0] // returns undefined
    a.length // returns 10.
    

    如果你写:

    a.toString() // returns ",,,,,,,,,", a comma for each element + 1
    

    但是,由于 Javascript 不需要为数组分配内存,最好使用 [] 构造函数:

    var a = [10];
    a[0] //returns 10
    a.length //returns 1
    

    我认为让所有人感到困惑的是:

    var a = new Array(1,2,3,4,5);
    a[0] // returns 1
    a.length // returns 5
    

    但你也可以这样做:

    var a = [1,2,3,4,5];
    a[0] // returns 1
    a.length // returns 5
    

    因此,总而言之,尽量避免使用 new Array 构造函数,而改用 [] 构造函数。

    【讨论】:

      猜你喜欢
      • 2016-07-18
      • 1970-01-01
      • 2012-07-03
      • 2014-10-24
      • 1970-01-01
      • 2012-05-06
      • 2023-01-22
      • 2021-11-01
      相关资源
      最近更新 更多