JavaScript参考手册
错误 | Errors
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)
错误 | Errors相关

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络