RangeError: Array length must be a finite positive integer (Edge) RangeError: invalid array length (Firefox) RangeError: Invalid array length (Chrome) RangeError: Invalid array buffer length (Chrome)

An invalid array length might appear in these situations:

- When creating an
`Array`

or an`ArrayBuffer`

which has a length which is either negative or larger or equal to 2^{32}, or - when setting the
`Array.length`

property to a value which is either negative or larger or equal to 2^{32}.

Why are `Array`

and `ArrayBuffer`

length limited? The `length`

property of an `Array`

or an `ArrayBuffer`

is represented with an unsigned 32-bit integer, that can only store values which are in the range from 0 to 2^{32}-1.

If you are creating an `Array`

, using the constructor, you probably want to use the literal notation instead, as the first argument is interpreted as the length of the `Array`

.

Otherwise, you might want to clamp the length before setting the length property, or using it as argument of the constructor.

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)

© 2005–2018 Mozilla Developer Network and individual contributors.

Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length