RangeError: invalid array length (Firefox) RangeError: Invalid array length (Chrome) RangeError: Invalid array buffer length (Chrome)é误类å ä»ä¹å°æ¹åºéäºï¼
æ æçæ°ç»é误é¿åº¦é常ä¼å¨ä»¥ä¸æ å½¢ä¸åºç°ï¼
Array
æè
ArrayBuffer
æ¶ãArray.length
屿§ä¸ºè´æ°æè
é¿åº¦å¤§äºçäº 2^32 æ¶ã为ä»ä¹ Arrayï¼æ°ç»ï¼å ArrayBufferï¼æ°ç»ç¼å²åºï¼çé¿åº¦ä¼åå°éå¶ï¼å 为 Array å ArrayBuffer ç lengthï¼é¿åº¦ï¼å±æ§è¢«å®ä¹ä¸ºä¸ä¸ª 32 使 ç¬¦å·æ´å½¢ï¼unsigned 32-bit integerï¼çå¼ï¼æä»¥å®åªè½åå¨ 0 - 2^32 - 1 ä¹é´çæ°ã
å½ä½ ä½¿ç¨æé 彿°æ¥å建ä¸ä¸ªæ°ç»çæ¶åï¼ä½ å¯è½æ³ä½¿ç¨åé¢å¼çå½¢å¼ï¼ç¬¬ä¸ä¸ªåæ°ä¼è¢«è§£é为æ°ç»çé¿åº¦ã
æè 说ï¼ä½ æ³è¦å¨è®¾ç½®æ°ç»ä¹åç¡®å®å®çé¿åº¦ï¼ææå®ä½ä¸ºä¸ä¸ªæé 彿°çåæ°ã
ç¤ºä¾ é误ç示ä¾new Array(Math.pow(2, 40));
new Array(-1);
new ArrayBuffer(Math.pow(2, 32)); // 32 ä½ç³»ç»
new ArrayBuffer(-1);
const a = [];
a.length = a.length - 1; // å° length 屿§çå¼è®¾ç½®ä¸º -1
const b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1; // å° length 屿§çå¼è®¾ç½®ä¸º 2^32
b.length = 2.5; // å° length 屿§è®¾ç½®ä¸ºæµ®ç¹æ°
const c = new Array(2.5); // ä¼ å
¥æµ®ç¹æ°
æ£ç¡®ç示ä¾
[Math.pow(2, 40)]; // [ 1099511627776 ]
[-1]; // [ -1 ]
new ArrayBuffer(Math.pow(2, 32) - 1);
new ArrayBuffer(Math.pow(2, 33)); // 64-bit systems after Firefox 89
new ArrayBuffer(0);
const a = [];
a.length = Math.max(0, a.length - 1);
const b = new Array(Math.pow(2, 32) - 1);
b.length = Math.min(0xffffffff, b.length + 1);
// 0xffffffff 0xffffffff æ¯ 2^32 - 1 çåå
è¿å¶è¡¨ç¤ºæ¹å¼
// å®ä¹å¯ä»¥è¢«åä½ (-1 >>> 0)
b.length = 3;
const c = new Array(3);
åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4