【问题标题】:Array construction and negative numbers数组构造和负数
【发布时间】:2010-05-19 19:38:24
【问题描述】:

我在 javascript 中实现了一种路由算法,但是当我在数组中分配一个负数时,我给出了这个错误:无效的数组长度。

var node = new Array()
node[0] = new Array(6,7)
node[1] = new Array(5,-4,8)
node[2] = new Array(-2) //Here, invalid array length

我不知道如何解决这个错误。

【问题讨论】:

    标签: javascript arrays negative-number


    【解决方案1】:

    如果您尝试初始化仅包含负数的数组,请使用文字语法:

    var a = [-2];
    

    Array 构造函数的问题是,当它只用一个参数调用时,这个数字被用作新数组的length,例如:

    var b = new Array(5);
    b.length; // 5
    

    我建议您坚持使用literal syntax 以避免这些歧义。

    【讨论】:

    • 这在一些遗留代码(不,我不会接受责备!)中被我咬过,其中数字列表(大数据库键,如信用卡号码,但不完全是)在 JSP 变量中。奇怪的是,只要列表中只有一个数字,浏览器就会出现“内存不足”错误:-)
    • 如果唯一的参数是一个整数,就会发生这种情况,它适用于字符串。
    【解决方案2】:

    不要这样声明数组!

    var node = [6, 7];
    

    【讨论】:

      【解决方案3】:

      这是因为一个整数参数设置了新数组的大小。

      【讨论】:

        【解决方案4】:

        array constructor documentation 显示以下内容

        var arr1 = new Array(arrayLength);
        var arr2 = new Array(element0, element1, ..., elementN);
        

        所以,如果你只使用一个参数,它会创建一个arrayLength 的数组;否则,如果您使用多个,它将​​使用这些值填充数组。

        但是,正如其他人指出的那样,最好使用文字符号 *

        var node = [
            [6, 7], 
            [5, -4 8],
            [-2]
        ];
        

        * 数组字面量表示法比new Array() 稍微快一点,但这是一种微优化,在大多数情况下并不是很重要。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-13
          • 2017-01-21
          • 1970-01-01
          相关资源
          最近更新 更多