--- title: 'RangeError: invalid array length' slug: Web/JavaScript/Reference/Errors/Invalid_array_length translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length ---
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)
{{jsxref("RangeError")}}
一個無效的陣列長度可能發生於以下幾種情形:
為什麼 Array 和 ArrayBuffer 的長度有限? Array 和 ArrayBuffer 的屬性以一個32位元的非負整數表使,因此僅能儲存 0 到 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 是 2^32 - 1 的十六進位表示 // 也可以寫成 (-1 >>> 0)