在线文档教程
JavaScript
错误 | Errors

Errors: Invalid array length

Errors: Invalid array length

信息

RangeError: invalid array length (Firefox) RangeError: Invalid array length (Chrome) RangeError: Invalid array buffer length (Chrome)

错误类型

RangeError

哪里错了?

在这些情况下可能会出现无效的数组长度:

  • 当创建一个Array或一个ArrayBuffer具有的长度为负或大于或等于232,或

  • 当将Array.length属性设置为负值或大于或等于232的值时。

为什么ArrayArrayBuffer长度有限?lengthan Array或an 的属性ArrayBuffer用无符号的32位整数表示,只能存储0到232-1范围内的值。

如果Array使用构造函数创建一个,则可能需要使用文字符号,因为第一个参数被解释为长度Array

否则,您可能需要在设置length属性之前限制长度,或者将其用作构造函数的参数。

示例

无效的值

new Array(Math.pow(2, 40)) new Array(-1) new ArrayBuffer(Math.pow(2, 32)) new ArrayBuffer(-1) let a = []; a.length = a.length - 1; // set -1 to the length property let b = new Array(Math.pow(2, 32) - 1 b.length = b.length + 1; // set 2^32 to the length property

有效的例子

[ Math.pow(2, 40) ] // [ 1099511627776 ] [ -1 ] // [ -1 ] new ArrayBuffer(Math.pow(2, 32) - 1) new ArrayBuffer(0) let a = []; a.length = Math.max(0, a.length - 1 let b = new Array(Math.pow(2, 32) - 1 b.length = Math.min(0xffffffff, b.length + 1 // 0xffffffff is the hexadecimal notation for 2^32 - 1 // which can also be written as (-1 >>> 0)