RangeError: invalid array length
JavaScript ã®ä¾å¤ "Invalid array length" ã¯ãé
åã®é·ããè² ã®æ°ãããã©ãããã©ã¼ã ã§å¯¾å¿ãã¦ããæå¤§å¤ãè¶
ããå¤ã«è¨å®ãããã¨ããã¨ã (ããªãã¡ã Array ã¾ã㯠ArrayBuffer ãçæãããã¨ããã¨ããã¾ã㯠Array.length ãè¨å®ãããã¨ããã¨ã) ã«çºçãã¾ãã
é
åã®é·ãã«è¨±ããã¦ããæå¤§å¤ã¯ããã©ãããã©ã¼ã ã¨ãã©ã¦ã¶ã¼ã¨ãã®ãã¼ã¸ã§ã³ã«ä¾åãã¾ãã Array ã«ã¤ãã¦ã¯ãæå¤§é·ã¯ 2GB-1 (2^32-1) ã§ãã ArrayBuffer ã«ã¤ãã¦ã¯ãæå¤§å¤ã¯ 32 ãããã·ã¹ãã ã§ 2GB-1 (2^32-1) ã§ãã Firefox ãã¼ã¸ã§ã³ 89 ããã ArrayBuffer ã®æå¤§å¤ã¯ 64 ãããã·ã¹ãã ã§ã¯ 8GB (2^33) ã§ãã
ã¡ã¢:
Array 㨠ArrayBuffer ã¯å¥åã®ãã¼ã¿æ§é ã§ã (䏿¹ã®å®è£
ããã䏿¹ã«ã¯å½±é¿ãã¾ãã)ã
ã¡ãã»ã¼ã¸
RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chromium-based)
RangeError: Array buffer allocation failed (Chromium-based)
ã¨ã©ã¼ã®ç¨®é¡
RangeError
ã¨ã©ã¼ã®åå
é åã®é·ãã䏿£ã«ãªãã®ã¯ã以ä¸ã®ãããªå ´åã§ãã
ArrayãArrayBufferããè² ã®æ°ã®é·ãã§çæãããã¨ããããArray.lengthããããã£ã«è² ã®æ°ãè¨å®ãããã¨ããã- 2GB-1 (2^32-1) ããã大ããª
Arrayãçæãããã¨ããããArray.lengthããããã£ã«è¨å®ãããã¨ããã - 32 ãããã·ã¹ãã ã§ 2GB-1 (2^32-1)ã 64 ãããã·ã¹ãã ã§ 8GB (2^33) ãè¶
ãã
ArrayBufferãçæãããã¨ããã - Firefox 89 以å: 2GB-1 (2^32-1) ãã大ããª
ArrayBufferãçæãããã¨ããã
ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ã㦠Array ãçæããã¨ãæåã®å¼æ°ã Array ã®é·ãã¨ãã¦è§£éãããã®ã§ã代ããã«ãªãã©ã«è¡¨è¨ã使ã£ãæ¹ãè¯ãããããã¾ããã
ããã§ãªãå ´åã¯ã length ããããã£ãè¨å®ããåãã¾ãã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã®å¼æ°ã¨ãã¦ä½¿ç¨ããåã«ãé·ããå¶éãã¦ããã¨ããã§ãããã
ä¾
>䏿£ãªã±ã¼ã¹
new Array(Math.pow(2, 40));
new Array(-1);
new ArrayBuffer(Math.pow(2, 32)); //32 ãããã·ã¹ãã
new ArrayBuffer(-1);
let a = [];
a.length = a.length - 1; // length ããããã£ã« -1 ãè¨å®
let b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1; // length ããããã£ã« 2^32 ãè¨å®
æå¹ãªå ´å
[Math.pow(2, 40)]; // [ 1099511627776 ]
[-1]; // [ -1 ]
new ArrayBuffer(Math.pow(2, 32) - 1);
new ArrayBuffer(Math.pow(2, 33)); // 64 ãããã·ã¹ãã ã Firefox 89 以é
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 ã® 16 é²è¡¨è¨ã§ãã
// (-1 >>> 0) ã¨æ¸ããã¨ãã§ãã¾ãã