首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Errors: Invalid array length

信息

代码语言:javascript
复制
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属性之前限制长度,或者将其用作构造函数的参数。

示例

无效的值

代码语言:javascript
复制
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

有效的例子

代码语言:javascript
复制
[ 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)

扫码关注腾讯云开发者

领取腾讯云代金券