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的值时。
为什么Array
和ArrayBuffer
长度有限?length
an 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)