๋ฉ์ธ์ง
RangeError: invalid array length (Firefox) RangeError: Invalid array length (Chrome) RangeError: Invalid array buffer length (Chrome)
์๋ฌ ํ์
๋ฌด์์ด ์๋ชป ๋ ๊ฒ์ผ๊น?
๋ค์๊ณผ ๊ฐ์ ์์ธ ๋๋ฌธ์ด๋ค:
- 232์ ๊ฐ๊ฑฐ๋ ์ด๋ณด๋ค ๊ธด, ํน์ ์์์ ๊ธธ์ด๋ฅผ ๊ฐ์ง
Array
๋ArrayBuffer
๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, ํน์ Array
์์ฑ์ 232์ ๊ฐ๊ฑฐ๋ ์ด๋ณด๋ค ๊ธด ๊ฐ์ผ๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
Array์ ArrayBuffer์ ๊ธธ์ด์ ์ ํ์ ๋ ์ด์ ๋, Array๋ ArrayBuffer์ length ์์ฑ์ ์ฌ์ธ๋์ง ์์(unsigned) 32 ๋นํธ ์ ์๋ก ๋ฐ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ Array๋ ArrayBuffer๋ ์ค์ง 0 ~
232-1 ์ฌ์ด์ ๊ฐ๋ง์ ์ ์ฅํ ์ ์๋ค.
Array์ length๋ก ํด์๋๋ ์ฒซ๋ฒ์งธ argument๋ก์ ๋ฌธ์์ด ํ๊ธฐ๋ฅผ ํตํด contructor๋ฅผ ์ฌ์ฉํ์ฌ Array๋ฅผ ์์ฑํ ์ ์๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋, length ์์ฑ์ ์ค์ ํ๊ธฐ ์ ์ length์ ๊ธธ์ด์ ์ ํ์ ๋๊ฑฐ๋, constructor์ aurgment๋ก์ ์ฌ์ฉํ ์ ์๋ค.
์์
์๋ชป๋ ์์
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)