RangeError: invalid array length
ë©ì¸ì§
RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chrome)
RangeError: Invalid array buffer length (Chrome)
ìë¬ íì
RangeError
무ìì´ ì못 ë ê²ì¼ê¹?
ë¤ìê³¼ ê°ì ìì¸ ë문ì´ë¤:
- 2^32ì ê°ê±°ë ì´ë³´ë¤ 긴, í¹ì ììì 길ì´ë¥¼ ê°ì§
ArrayëArrayBuffer를 ìì±í기 ë문ì, í¹ì Arrayìì±ì 2^32ì ê°ê±°ë ì´ë³´ë¤ 긴 ê°ì¼ë¡ ì¤ì í기 ë문ì´ë¤.
Array ì ArrayBuffer ì 길ì´ì ì íì ë ì´ì ë, Array ë ArrayBuffer ì length ìì±ì ì¬ì¸ëì§ ìì(unsigned) 32 ë¹í¸ ì ìë¡ ë°ìë기 ë문ì´ë¤. ì¦ Arrayë ArrayBuffer ë ì¤ì§ 0 ~2^32-1 ì¬ì´ì ê°ë§ì ì ì¥í ì ìë¤.
Arrayì lengthë¡ í´ìëë 첫ë²ì§¸ argumentë¡ì 문ìì´ í기를 íµí´ contructor를 ì¬ì©íì¬ Array를 ìì±í ì ìë¤.
ë¤ë¥¸ ë°©ë²ì¼ë¡ë, length ìì±ì ì¤ì í기 ì ì lengthì 길ì´ì ì íì ëê±°ë, constructorì aurgmentë¡ì ì¬ì©í ì ìë¤.
ìì
>ì못ë ìì
js
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
ì¬ë°ë¥¸ ìì
js
[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)