TypeError: can't delete non-configurable array element
JavaScript ã®ä¾å¤ "can't delete non-configurable array element" ã¯ãé åãç縮ãããã¨ããã¨ãã«é åã®è¦ç´ ã® 1 ã¤ãè¨å®ä¸å¯ã§ãã£ãå ´åã«çºçãã¾ãã
ã¨ã©ã¼ã¡ãã»ã¼ã¸
TypeError: can't delete non-configurable array element (Firefox)
TypeError: Cannot delete property '2' of [object Array] (Chrome)
ã¨ã©ã¼ã®ç¨®é¡
TypeError
ã¨ã©ã¼ã®åå
é åãç縮ãããã¨ãã¦ãã¾ãããé åã®è¦ç´ ã夿´ä¸å¯ã§ããé åã®ç縮ãããã¨ããæ°ããé åã®é·ããè¶ ããè¦ç´ ã¯åé¤ããã¾ããããã®ã·ãã¥ã¨ã¼ã·ã§ã³ã§ã¯å¤±æãã¾ãã
configurable 屿§ã¯ããããã£ããªãã¸ã§ã¯ãããåé¤ã§ãããã©ãããããã³ (writable 以å¤ã®) 夿´ã§ãããã©ãããå¶å¾¡ãã¾ãã
é常ãé
ååæååã§çæããããªãã¸ã§ã¯ãã®ããããã£ã¯å¤æ´å¯è½ã§ãããããããã¨ãã° Object.defineProperty() ã使ç¨ãããå ´åãæ¢å®ã§ããããã£ã夿´ã§ãã¾ããã
ä¾
>Object.defineProperty ã§çæãã夿´ä¸å¯è½ãªããããã£
ããããã£ã夿´ã§ããªãããã«æå®ããå ´åãObject.defineProperty() ã¯æ¢å®ã§å¤æ´ã§ããªãããããã£ãçæãã¾ãã
"use strict";
var arr = [];
Object.defineProperty(arr, 0, { value: 0 });
Object.defineProperty(arr, 1, { value: "1" });
arr.length = 1;
// TypeError: can't delete non-configurable array element
é åãç縮ãããå ´åãè¦ç´ ã夿´å¯è½ã«è¨å®ããå¿ è¦ãããã¾ãã
"use strict";
var arr = [];
Object.defineProperty(arr, 0, { value: 0, configurable: true });
Object.defineProperty(arr, 1, { value: "1", configurable: true });
arr.length = 1;
å°å°ãããé å
Object.seal() 颿°ã¯ãã¹ã¦ã®åå¨ããè¦ç´ ãè¨å®ä¸å¯ã«ãã¾ãã
"use strict";
var arr = [1, 2, 3];
Object.seal(arr);
arr.length = 1;
// TypeError: can't delete non-configurable array element
Object.seal() ã®å¼ã³åºããåé¤ããããé
åã®ã³ãã¼ãåãå¿
è¦ãããã¾ããã³ãã¼ã®å ´åãã³ãã¼ããé
åã®ç縮ã¯å
ã®é
åã®é·ãã«å½±é¿ãã¾ããã
"use strict";
var arr = [1, 2, 3];
Object.seal(arr);
// Copy the initial array to shorten the copy
var copy = Array.from(arr);
copy.length = 1;
// arr.length == 3