ã¡ã¢: æ¢å®ã®å³æ ¼ã§ãªãã¢ã¼ãã Sloppy ã¢ã¼ã ã¨å¼ã¶ã®ãç®ã«ãããã¨ãããããããã¾ãããããã¯å ¬å¼ãªç¨èªã§ã¯ããã¾ããã念ã®ããæ³¨æãã¦ãã ããã
JavaScript ã®å³æ ¼ã¢ã¼ã (Strict mode) ã¯ã JavaScript ã®èªç±åº¦ãå¶éãããã¨ã«ãªããã¤ã³ãããã¨ã«ãã£ã¦ãæé»ã®ãã¡ã« Sloppy ã¢ã¼ããããªããã¢ã¦ãããæ¹æ³ã§ãã峿 ¼ã¢ã¼ãã¯åãªããµãã»ããã§ã¯ãªããé常ã®ã³ã¼ãã¨ã¯æå³çã«ç°ãªãæå³ãæã£ã¦ãã¾ãã峿 ¼ã¢ã¼ãã«å¯¾å¿ãã¦ããªããã©ã¦ã¶ã¼ã¯ã峿 ¼ã¢ã¼ãã«å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã¨ã¯ç°ãªãåä½ãããå¯è½æ§ãããã¾ãã®ã§ã峿 ¼ã¢ã¼ãã«é¢ããå´é¢ã«å¯¾å¿ãã¦ãããã©ããã®æ©è½ãã¹ããè¡ããã«å³æ ¼ã¢ã¼ããé ¼ããªãã§ãã ããã峿 ¼ã¢ã¼ãã®ã³ã¼ãã¨é峿 ¼ã¢ã¼ãã®ã³ã¼ãã¯å ±åã§ãã¾ãã®ã§ãã¹ã¯ãªãããé æ¬¡å³æ ¼ã¢ã¼ãã«ãªããã¤ã³ãããã¨ãã§ãã¾ãã
峿 ¼ã¢ã¼ãã§ã¯ãé常㮠JavaScript ã®æå³ã«ããã¤ãã®å¤æ´ãå ãã¾ãã
峿 ¼ã¢ã¼ãã¯ã¹ã¯ãªããå
¨ä½ã¾ãã¯åå¥ã®é¢æ°ã«é©ç¨ã§ãã¾ãã䏿¬å¼§ {}
ã§æ¬ããããããã¯æ§æã«ã¯é©ç¨ã§ãã¾ããããã®ãããªå ´æã«é©ç¨ãããã¨ãã¦ãä½ãèµ·ãã¾ãããeval
ã®ã³ã¼ãã Function
ã®ã³ã¼ããã¤ãã³ããã³ãã©ã¼å±æ§ãsetTimeout()
ãªã©ã®é¢æ°ã«æ¸¡ãæååã¯ã颿°ã®æ¬ä½ã¾ãã¯ã¹ã¯ãªããå
¨ä½ã§ããã峿 ¼ã¢ã¼ããå¼ã³åºãã¨æå¾
ã©ããã«åä½ãã¾ãã
ã¹ã¯ãªããå
¨ä½ã§å³æ ¼ã¢ã¼ããå¼ã³åºãã«ã¯ãä»ã®ãããªãæãããåã« "use strict";
(ã¾ã㯠'use strict';
) ã¨ããæããã®ã¾ã¾è¿½å ãã¾ãã
// ã¹ã¯ãªããå
¨ä½ã®å³æ ¼ã¢ã¼ãæ§æ
"use strict";
const v = "ããã«ã¡ã¯ï¼å³æ ¼ã¢ã¼ãã®ã¹ã¯ãªããï¼";
颿°ã«ããã峿 ¼ã¢ã¼ã
åæ§ã«ã颿°ã§å³æ ¼ã¢ã¼ããå¼ã³åºãã«ã¯ã颿°æ¬ä½ã§ä»ã®ãããªãæãããåã« "use strict";
(ã¾ã㯠'use strict';
) ã¨ããæããã®ã¾ã¾è¿½å ãã¾ãã
function myStrictFunction() {
// 颿°ã¬ãã«ã®å³æ ¼ã¢ã¼ãæ§æ
"use strict";
function nested() {
return "ç§ãããã§ãï¼";
}
return `ããã«ã¡ã¯ï¼å³æ ¼ã¢ã¼ãã®é¢æ°ã§ãï¼ ${nested()}`;
}
function myNotStrictFunction() {
return "峿 ¼ã¢ã¼ãã§ã¯ããã¾ããã";
}
"use strict"
ãã£ã¬ã¯ãã£ãã¯ãåç´ãªå¼æ°ãæã¤é¢æ°ã®æ¬ä½ã«ã®ã¿ä½¿ç¨ãããã¨ãã§ãã¾ãã "use strict"
ãæ®ä½ãããã©ã«ããåå²å¼æ°ã®ãã颿°ã§ä½¿ç¨ããã¨ãæ§æã¨ã©ã¼ã¨ãªãã¾ãã
function sum(a = 1, b = 2) {
// SyntaxError: "use strict" not allowed in function with default parameter
"use strict";
return a + b;
}
ã¢ã¸ã¥ã¼ã«ã§ã®å³æ ¼ã¢ã¼ã
JavaScript ã¢ã¸ã¥ã¼ã«ã¯å å®¹å ¨ä½ãèªåçã«å³æ ¼ã¢ã¼ãã«ãªãããããéå§ããããã®å®£è¨ã¯å¿ è¦ããã¾ããã
function myStrictFunction() {
// ããã¯ã¢ã¸ã¥ã¼ã«ãªã®ã§ãæ¢å®ã§å³æ ¼ã¢ã¼ãã§ã
}
export default myStrictFunction;
ã¯ã©ã¹ã§ã®å³æ ¼ã¢ã¼ã
ã¯ã©ã¹æ¬ä½ã®ãã¹ã¦ã®é¨åã¯ãã¯ã©ã¹å®£è¨ã§ãã¯ã©ã¹å¼ã§ãã峿 ¼ã¢ã¼ãã®ã³ã¼ãã«ãªãã¾ãã
class C1 {
// ããã«ããã³ã¼ãã¯ãã¹ã¦å³æ ¼ã¢ã¼ãã§è©ä¾¡ããã¾ã
test() {
delete Object.prototype;
}
}
new C1().test(); // TypeErrorã test() ã峿 ¼ã¢ã¼ãã§ãããã
const C2 = class {
// ããã«ããã³ã¼ãã¯ãã¹ã¦å³æ ¼ã¢ã¼ãã§è©ä¾¡ããã¾ã
};
// ãã®ã³ã¼ãã¯å³æ ¼ãªã¢ã¼ãã§ãªãå¯è½æ§ãããã¾ãã
delete Object.prototype; // ã¨ã©ã¼ã¯çºçããªã
峿 ¼ã¢ã¼ãã§ã®å¤æ´ç¹
峿 ¼ã¢ã¼ãã§ã¯æ§æã¨å®è¡æåä½ã®ä¸¡æ¹ã«å¤æ´ãå ããã¾ãã夿´ç¹ã¯ä»¥ä¸ã®ã«ãã´ãªã¼ã«åé¡ããã¾ãã
eval
ããã³ arguments
ã®åç´å峿 ¼ã¢ã¼ãã§ã¯ã徿¥ã¯åãå ¥ãã¦ããä¸é¨ã®ãã¹ãã¨ã©ã¼ã«å¤æ´ãã¾ããJavaScript ã¯æªçãªéçºè ã«ãæããããã«è¨è¨ãããã¾ãã¨ã©ã¼ã¨ãã¹ãæä½ã®ä¸é¨ãã¨ã©ã¼ã¨ãã¦æ±ãã¾ãããããã«ããå½é¢ã®åé¡ã解決ãããã¨ãããã¾ãããå¾ã«ãã大ããªåé¡ãå¼ãèµ·ããããã¨ãããã¾ãã峿 ¼ã¢ã¼ãã§ã¯ãããã®ãã¹ãã¨ã©ã¼ã¨ãã¦æ±ããã¨ã§ãéçºè ã¯æ°ã¥ãã¦ä¿®æ£ããããã«ãªãã¾ãã
æªå®£è¨ã®å¤æ°ã¸ã®ä»£å ¥å³æ ¼ã¢ã¼ãã§ã¯ãå¶çºçã«ã°ãã¼ãã«å¤æ°ã使ã§ããªãããã«ãã¾ãã峿 ¼ã¢ã¼ãã§ãªãå ´åã¯ãä»£å ¥æã§å¤æ°åã®ç¶´ããééããã¨ã°ãã¼ãã«ãªãã¸ã§ã¯ãã«æ°ããããããã£ã使ãããããã¦ããã¯åä½ãç¶ãã¾ãã峿 ¼ã¢ã¼ãã§ã¯ãä»£å ¥æã§å¶çºçã«ã°ãã¼ãã«å¤æ°ã使ããã«ã¨ã©ã¼ãçºçãã¾ãã
"use strict";
let mistypeVariable;
// ã°ãã¼ãã«å¤æ° mistypeVarible ãåå¨ããªãå ´åã
// ãã®è¡ã¯ "mistypeVariable" ã®ã¹ãã«ãã¹
// ï¼"a" ããªãï¼ã¨è¦ãªã㦠ReferenceError ãçºçããã¾ãã
mistypeVarible = 17;
ãªãã¸ã§ã¯ãããããã£ã¸ã®ä»£å
¥ã®å¤±æ
峿 ¼ã¢ã¼ãã§ã¯ãä»£å ¥æã§æé»çã«å¤±æããã«ä¾å¤ãçºçããããã«ãã¾ããããããã£ã¸ã®ä»£å ¥ã失æããæ¡ä»¶ã¯3 ã¤ããã¾ãã
ä¾ãã°ãNaN
ã¯æ¸ãè¾¼ã¿ä¸å¯ã®ã°ãã¼ãã«å¤æ°ã§ãã峿 ¼ã¢ã¼ãã§ãªãå ´åã¯ã NaN
ã«ä»£å
¥ãã¦ãä½ãèµ·ãã¾ãããã¤ã¾ããéçºè
ã¯å¤±æããã¨ããéç¥ãåãã¾ããã峿 ¼ã¢ã¼ãã§ã¯ NaN
ã«ä»£å
¥ããã¨ä¾å¤ãçºçãã¾ãã
"use strict";
// æ¸ãæãä¸å¯è½ãªã°ãã¼ãã«ã¸ã®ä»£å
¥
undefined = 5; // TypeError
Infinity = 5; // TypeError
// æ¸ãæãä¸å¯è½ãªããããã£ã¸ã®ä»£å
¥
const obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // TypeError
// ã²ãã¿ã¼ã®ã¿ã®ããããã£ã¸ã®ä»£å
¥
const obj2 = {
get x() {
return 17;
},
};
obj2.x = 5; // TypeError
// æ¡å¼µä¸å¯è½ãªãªãã¸ã§ã¯ãã®æ°ããããããã£ã¸ã®ä»£å
¥
const fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // TypeError
ãªãã¸ã§ã¯ãããããã£ã®åé¤ã®å¤±æ
峿 ¼ã¢ã¼ãã§ã¯ãå餿ä½ãæ§æä¸å¯ãã¾ãã¯ãã®ä»ã®çç±ã§åé¤ã§ããªãããããã£ï¼ä¾ãã°ããããã·ã¼ã® deleteProperty
ãã³ãã©ã¼ã false
ãè¿ããã¨ã§å¦¨å®³ããããã®ï¼ã«å¯¾ãã¦è©¦ã¿ãã¨ãä¾å¤ãçºçãã¾ãï¼ä»¥åã¯ä½ãèµ·ãã¾ããã§ããï¼ã
"use strict";
delete Object.prototype; // TypeError
delete [].length; // TypeError
峿 ¼ã¢ã¼ãã§ã¯ãç´ ã®ååãåé¤ãããã¨ãç¦ãããã¦ãã¾ãã delete name
ã¯å³æ ¼ã¢ã¼ãã§ã¯æ§æã¨ã©ã¼ã«ãªãã¾ãã
"use strict";
var x;
delete x; // syntax error
ååãè¨å®å¯è½ãªã°ãã¼ãã«ããããã£ã®å ´åããããåé¤ããã«ã¯ globalThis
ãåã«ä»ãã¦ãã ããã
"use strict";
delete globalThis.x;
弿°åã®éè¤
峿 ¼ã¢ã¼ãã§ã¯ã颿°ã®å¼æ°åã䏿ã§ãããã¨ãè¦æ±ããã¾ãã峿 ¼ã¢ã¼ãã§ãªãå ´åã¯ã弿°ã®ååãéè¤ãã¦ããã¨ãåãååã®åã®å¼æ°ãè¦ããªããªãã¾ããããããåã®å¼æ°ã¯ arguments
ãéãã°å©ç¨å¯è½ãªã®ã§ãå®å
¨ã«ã¢ã¯ã»ã¹ã§ããªãããã§ã¯ããã¾ããããããããã®é è½ã¯ã»ã¨ãã©æå³ããªããããããæã¾ãããªããã®ã§ãï¼ä¾ãã°ãã¿ã¤ããã¹ãé ãã¦ãã¾ãããããã¾ããï¼ããããã£ã¦ã峿 ¼ã¢ã¼ãã§ã¯å¼æ°åãéè¤ããã¨æ§æã¨ã©ã¼ã«ãªãã¾ãã
function sum(a, a, c) {
// æ§æã¨ã©ã¼
"use strict";
return a + a + c; // ãã®ã³ã¼ããå®è¡ããã失æãã
}
å¤ã 8 鲿°ãªãã©ã«
峿 ¼ã¢ã¼ãã§ã¯ã0
ãå
é ã¨ãã 8 鲿°è¡¨è¨ã 8 鲿°ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ãç¦æ¢ãã¾ãã峿 ¼ã¢ã¼ã以å¤ã§ã¯ã 0644
ã®ãã㪠0
ã§å§ã¾ãæ°å¤ã¯ããã¹ã¦ã®æ¡ã 8 ããå°ããå ´åã 8 鲿° (0644 === 420
) ã¨ãã¦è§£éããã¾ããåå¿è
ã®éçºè
ã¯ãæ¥é è¾ã«ä½ã®æå³ããªãã¨ä¿¡ãã¦ãé
ç½®ç¨ã®å¨å
·ã¨ãã¦ä½¿ç¨ãããã¨ãããã¾ãããããã¯æ°åã®æå³ãå¤ãã¦ãã¾ãã¾ãã 8 鲿°ã®å
é ã¼ãã®æ§æã¯ã»ã¨ãã©æçãªãã®ã§ã¯ãªããééã£ã¦ä½¿ç¨ãããå¯è½æ§ãããããã峿 ¼ã¢ã¼ãã§ã¯æ§æã¨ã©ã¼ã¨ãªãã¾ãã
"use strict";
const sum =
015 + // æ§æã¨ã©ã¼
197 +
142;
8 鲿°ã®ãªãã©ã«ã表è¨ããæ¨æºã®æ¹æ³ã¯ã以ä¸ã®ããã« 0o
ã®æ¥é è¾ãä»ãããã¨ã§ãã
const sumWithOctal = 0o10 + 8;
console.log(sumWithOctal); // 16
8 鲿°ã®æ¡å¼µ ASCII æåã³ã¼ãçªå·ã§æåã表ããããã«ã "%"
ã¨çãã "\45"
ã®ãã㪠8 鲿°ã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã使ç¨ã§ãã¾ãã峿 ¼ã¢ã¼ãã§ã¯ãããã¯æ§æã¨ã©ã¼ã«ãªãã¾ããããæ£å¼ã«ã¯ã \
ã«ç¶ã㦠0
以å¤ã®æ°åãç¶ããã \0
ã«æ°åãç¶ããããããã¨ã¯è¨±ããã¦ãã¾ãããä¾ãã° \9
ã \07
ã®å½¢ã¯è¨±ããã¾ããã
峿 ¼ã¢ã¼ãã§ã¯ãããªããã£ãå¤ã«ããããã£ãè¨å®ãããã¨ãç¦æ¢ããã¾ããããªããã£ãã®ããããã£ã«ã¢ã¯ã»ã¹ããã¨ãæé»ã«è¦³å¯ã§ããªãã©ããã¼ãªãã¸ã§ã¯ããçæãããããã峿 ¼ã¢ã¼ãã§ãªãå ´åã¯ããããã£ã®è¨å®ãç¡è¦ããã¾ãï¼ä½ãèµ·ããã¾ããï¼ã峿 ¼ã¢ã¼ãã§ã¯ TypeError
ãçºçãã¾ãã
"use strict";
false.true = ""; // TypeError
(14).sailing = "home"; // TypeError
"with".you = "far away"; // TypeError
ããããã£åã®éè¤
峿 ¼ã¢ã¼ãã®ã³ã¼ãã§ã¯ãããããã£åãéè¤ãã㨠SyntaxError
ã¨è¦ãªããã¦ãã¾ãããããããã£åã®è¨ç®å¤ã®å°å
¥ã«ãããå®è¡æã«éè¤ããå¯è½æ§ãåºã¦ããããã ECMAScript 2015 ã§ã¯ãã®å¶éãæ¤å»ããã¾ããã
"use strict";
const o = { p: 1, p: 2 }; // ECMAScript 2015 以åã§ã¯æ§æã¨ã©ã¼
ã¡ã¢: ããã¾ã§ã¨ã©ã¼ã¨ããã¦ããã³ã¼ããã¨ã©ã¼ã§ãªãããã¨ã常ã«å¾æ¹äºææ§ããããã®ã¨è¦ãªããã¾ããããã¯ãè¨èªãã¨ã©ã¼ãçºçããããã¨ã«å³æ ¼ã§ãããã¨ã®è¯ãé¨åã§ãããå°æ¥ã®æå³ã¥ãã®å¤æ´ã®ããã®ä½å°ãæ®ãã¦ãã¾ãã
ã¹ã³ã¼ã管çã®åç´å峿 ¼ã¢ã¼ãã§ã¯ãã³ã¼ãä¸ã®å¤æ°åã¨ç¹å®ã®å¤æ°å®ç¾©ã¨ã®å¯¾å¿ã¥ãæ¹æ³ãåç´åãã¾ããå¤ãã®ã³ã³ãã¤ã©ã¼ã®æé©åã¯ã夿° X ãããå ´æã«ä¿ç®¡ãã¦ãããã¨è¡¨ç¾ã§ãããã¨ã«ä¾åãã¦ãã¾ãããã㯠JavaScript ã®ã³ã¼ããæå¤§éã«æé©åããããã«éè¦ã§ãã JavaScript ã§ã¯ãã®ãããªã³ã¼ãå ã®ååã¨å¤æ°å®ç¾©ã¨ã®åºæ¬çãªå¯¾å¿ã¥ãããå®è¡æã¾ã§è¡ããã¨ãã§ããªãå ´åãããã¾ãã峿 ¼ã¢ã¼ãã§ã¯ãã®ãããªäºæ ãèµ·ããã±ã¼ã¹ãåãé¤ããã¨ã§ãã³ã³ãã¤ã©ã峿 ¼ã¢ã¼ãã®ã³ã¼ããããæé©åã§ããããã«ãã¾ãã
with æã®åé¤å³æ ¼ã¢ã¼ãã§ã¯ with
ãç¦æ¢ãã¦ãã¾ããwith
ã®åé¡ç¹ã¯ããããã¯å
ã«ããååããæ¸¡ããããªãã¸ã§ã¯ãã®ããããã£ã¾ãã¯ãããã¯ã®å¨å²ï¼ãããã¯ã°ãã¼ãã«ï¼ã®ã¹ã³ã¼ãã¸å®è¡æã«å¯¾å¿ã¥ãããã¨ã§ããããã¯äºåã«è¡ããã¨ãã§ãã¾ããã峿 ¼ã¢ã¼ãã§ã¯ with
ãã¨ã©ã¼ã¨ãããã¨ã§ã with
å
ã«ããååã®æãå ´æãå®è¡æã«ä¸æã«ãªãå¯è½æ§ããªããã¾ãã
"use strict";
const x = 17;
with (obj) {
// æ§æã¨ã©ã¼
// 峿 ¼ã¢ã¼ãã§ãªãã£ããããã㯠const x ã¨
// obj.x ã®ã©ã¡ãã«ãªãã®ã§ããããï¼
// ã³ã¼ããå®è¡ãã¦ã¿ãªãã¨ä¸æ¦ã«ã¯è¨ããªãã®ã§ã
// ååãæé©åãããã¨ã¯ã§ãã¾ããã
x;
}
with
ã®ç½®ãæãã¨ãã¦ããªãã¸ã§ã¯ãã«çãååã®å¤æ°ãå²ãå½ã¦ããã®å¤æ°ãç¨ãã¦å¯¾å¿ããããããã£ã«ã¢ã¯ã»ã¹ããã¨ãã代æ¡ãããã¾ãã
峿 ¼ã¢ã¼ãã§ã¯ã eval
ã¯å¨å²ã®ã¹ã³ã¼ãã«æ°ãã夿°ã使ãã¾ããã峿 ¼ã¢ã¼ãã§ãªãå ´åã eval("var x;")
ã¨ããã³ã¼ãã¯ã夿° x
ãå¨å²ã®é¢æ°ãã°ãã¼ãã«ã¹ã³ã¼ãã«ä½æãã¾ããããã¯ãä¸è¬çã« eval
ã®å¼ã³åºããå«ã颿°ã«ããã¦ã弿°ããã¼ã«ã«å¤æ°ãåç
§ãã¦ããªããã¹ã¦ã®ååã¯ãå®è¡æã«ç¹å®ã®å®ç¾©ã«å¯¾å¿ä»ããªããã°ãªããªããã¨ãæå³ãã¾ãï¼ãã® eval
ãæ°ãã夿°ãå°å
¥ãã¦ãå¤å´ã®å¤æ°ãé ãã¦ãã¾ããããããªãããã§ãï¼ã峿 ¼ã¢ã¼ãã§ã¯ eval
ã§è©ä¾¡ããã¦ããã³ã¼ãã§ã®ã¿ä½¿ç¨ã§ãã夿°ã使ããã®ã§ã夿°åãå¤é¨ã®å¤æ°ãä¸é¨ã®ãã¼ã«ã«å¤æ°ãæãã¦ãããã«ããããã eval
ã¯å½±é¿ãä¸ãã¾ããã
var x = 17;
var evalX = eval("'use strict'; var x = 42; x;");
console.assert(x === 17);
console.assert(evalX === 42);
eval()
ã«æ¸¡ãããæååã峿 ¼ãªã¢ã¼ãã§è©ä¾¡ããããã©ããã¯ã eval()
ã®èµ·åæ¹æ³ï¼ç´æ¥ eval ã鿥 eval ãï¼ã«ä¾åãã¾ãã
JavaScript ã®è¨èªä»æ§ã§ã¯ãå½åãããããã¯æã®ä¸ã«é¢æ°å®£è¨ãå ¥ãåã§è¨è¿°ãããã¨ãèªãã¦ãã¾ããã§ããããããããã¾ãã«ãç´æçãªãããã»ã¨ãã©ã®ãã©ã¦ã¶ã¼ãæ¡å¼µææ³ã¨ãã¦å®è£ ãã¦ãã¾ãããããã¦æ®å¿µãªãããå®è£ ã®æå³ã¥ããåãããè¨èªä»æ§ã¨ãã¦ãã¹ã¦ã®å®è£ ãæ´åãã¨ããã¨ãä¸å¯è½ã«ãªãã¾ããããã®ããããããã¯ã¹ã³ã¼ãä»ã颿°å®£è¨ã¯å³æ ¼ã¢ã¼ãã§ã®ã¿æç¤ºçã«æå®ããï¼ãã¤ã¦ã¯å³æ ¼ã¢ã¼ãã§ã¯ç¦æ¢ããã¦ããï¼ã䏿¹ã§å³æ ¼ã¢ã¼ãã§ãªãå ´åã®åä½ã¯ããã©ã¦ã¶ã¼ã«ãã£ã¦ã°ãã¤ããã¾ã¾ã«ãªã£ã¦ãã¾ãã
eval ããã³ arguments ã®åç´å峿 ¼ã¢ã¼ãã§ã¯ arguments
ããã³ eval
ã®å¥å¦ãã使¸ãã¾ããé常ã®ã³ã¼ãã§ã¯ã©ã¡ãã䏿è°ãªåä½ãããªãããã¾ãã eval
ã§ãã¤ã³ãã追å ãåé¤ãããããã¤ã³ãããå¤ã夿´ãããã arguments
ã®æ·»åã¤ãããããã£ãååä»ã弿°ã®å¥åã«ãªããã¨ã§ãã峿 ¼ã¢ã¼ãã§ã¯ã eval
㨠arguments
ããã¼ã¯ã¼ãã¨ãã¦æ±ããã¨ã«å¤§ããèµãåãã¾ããã
eval
ããã³ arguments
ã¨ããååã«å¯¾ãã¦è¨èªæ§æã§ã®ãã¤ã³ãã代å
¥ãä¸å¯ã«ãã¦ãã¾ãã以ä¸ã®ãããªè©¦ã¿ã¯ãã¹ã¦æ§æã¨ã©ã¼ã«ãªãã¾ãã
"use strict";
eval = 17;
arguments++;
++eval;
const obj = { set p(arguments) {} };
let eval;
try {
} catch (arguments) {}
function x(eval) {}
function arguments() {}
const y = function eval() {};
const f = new Function("arguments", "'use strict'; return 17;");
弿°ã¨ arguments ã®æ·»åãåæãããªã
峿 ¼ã¢ã¼ãã®ã³ã¼ãã¯ã arguments
ãªãã¸ã§ã¯ãã®æ·»åãå弿°ã®ãã¤ã³ãã¨åæããã¾ããã峿 ¼ã¢ã¼ãã§ãªãå ´åãæåã®å¼æ°ã arg
ã§ãã颿°ã§ã¯ã arg
ã«å¤ãè¨å®ãã㨠arguments[0]
ã®å¤ãè¨å®ããããã®éãåæ§ã§ãï¼å¼æ°ãæå®ããªãã£ãã arguments[0]
ãåé¤ãããããå ´åãé¤ãï¼ã峿 ¼ã¢ã¼ãã®é¢æ°ã® arguments
ãªãã¸ã§ã¯ãã¯ããã®é¢æ°ãå¼ã³åºãããã¨ãã®å
ã®å¼æ°ãæ ¼ç´ãã¾ãã arguments[i]
ã¯å¯¾å¿ããååä»ã弿°ã®å¤ã追跡ãã¾ããã
function f(a) {
"use strict";
a = 42;
return [a, arguments[0]];
}
const pair = f(17);
console.assert(pair[0] === 42);
console.assert(pair[1] === 17);
JavaScript ã®ãå®å
¨åã
峿 ¼ã¢ã¼ãã«ãããå®å ¨ãªã JavaScript ã®è¨è¿°ãããç°¡åã«ãªãã¾ããç¾å¨ãä¸é¨ã®ã¦ã§ããµã¤ãã§ã¯ã¦ã¼ã¶ã¼ã«å¯¾ããã¦ã§ããµã¤ãã®ä»ã®ã¦ã¼ã¶ã¼ãå®è¡ãããã¨ãã§ãã JavaScript ãè¨è¿°ããæ¹æ³ãæä¾ãã¦ãã¾ãããã©ã¦ã¶ã¼ã® JavaScript ã¯ã¦ã¼ã¶ã¼ã®å人æ å ±ã«ã¢ã¯ã»ã¹ã§ãããããå®è¡åã«é¨åçã«å¤æããç¦æ¢ãããæ©è½ã¸ã®ã¢ã¯ã»ã¹ãæ¤é²ããå¿ è¦ãããã¾ãããããã JavaScript ã¯æè»æ§ã«å¯ãã§ãããããå¤ãã®å®è¡æãã§ãã¯ãè¡ããªãã¨äºå®ä¸ä¸å¯è½ã§ãããã種ã®è¨èªé¢æ°ã¯ãå®è¡æãã§ãã¯ãè¡ããã¨ã§ããªãã®ããã©ã¼ãã³ã¹ã³ã¹ãããããã»ã©æµ¸éãã¦ãã¾ããããã¤ãã®å³æ ¼ã¢ã¼ãã®èª¿æ´ã¨ãã¦ã¼ã¶ãæç¨¿ãã JavaScript ã峿 ¼ã¢ã¼ãã®ã³ã¼ãã§ãããã¨ã¨ãç¹å®ã®æ¹æ³ã§å¼ã³åºããããã¨ãè¦æ±ãããã¨ã§ããããã®å®è¡æãã§ãã¯ã®å¿ è¦æ§ãå¤§å¹ ã«æ¸ãããã¨ãã§ãã¾ãã
this
ã®ç½®ãæããè¡ããªã
峿 ¼ã¢ã¼ãã§ã¯ã this
ã¨ãã¦é¢æ°ã«æ¸¡ãããå¤ã¯å¼·å¶çã«ãªãã¸ã§ã¯ãã«å¤æï¼å¥åãããã¯ã¹åãï¼ãã¾ããã峿 ¼ã¢ã¼ãã§ãªã颿°ã§ã¯ã this
ã¯å¸¸ã«ãªãã¸ã§ã¯ãã§ãã this
ããªãã¸ã§ã¯ãå¤ã§å¼ã³åºãããå ´åã¯æä¾ããããªãã¸ã§ã¯ãã this
ãããªããã£ãå¤ã§å¼ã³åºãããå ´åã¯ãããã¯ã¹åããã this
ã®å¤ã undefined
ã null
ã§å¼ã³åºãããå ´åã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ããã®ããããã«ãªãã¾ããï¼ç¹å®ã® this
ãæå®ããã«ã¯ call
ãapply
ãbind
ã使ç¨ãã¦ãã ãããï¼èªåçã«ããã¯ã¹åãè¡ãããã¨ããã©ã¼ãã³ã¹ãç ç²ã¨ãªãã ãã§ãªãããã©ã¦ã¶ã¼ã§ã°ãã¼ãã«ãªãã¸ã§ã¯ããå
¬éãããã¨ã¯ããå®å
¨ãªã JavaScript ç°å¢ãå¶éããªããã°ãªããªãæ©è½ã«ã°ãã¼ãã«ãªãã¸ã§ã¯ããã¢ã¯ã»ã¹ãããããã»ãã¥ãªãã£ãã¶ã¼ãã«ãªãã¾ãããããã£ã¦ã峿 ¼ã¢ã¼ãã®é¢æ°ã§ã¯ãæå®ããã this
ã¯ãªãã¸ã§ã¯ãã«ããã¯ã¹åããããæå®ãããªãã£ãå ´å㯠globalThis
ã§ã¯ãªã undefined
ã¨ãªãã¾ãã
"use strict";
function fun() {
return this;
}
console.assert(fun() === undefined);
console.assert(fun.call(2) === 2);
console.assert(fun.apply(null) === null);
console.assert(fun.call(undefined) === undefined);
console.assert(fun.bind(true)() === true);
ç©ã¿éãããããã£ã®åé¤
峿 ¼ã¢ã¼ãã§ã¯ãJavaScript ã®ã¹ã¿ãã¯ããæ¸¡ãæ©ãããã¨ãã§ããªããªãã¾ãããå¤ãã®å®è£
ã§ã¯ã颿°ã®ä¸æµã§ã®å¼ã³åºãå´ãæ¤åºãããã¨ãå¯è½ãªãããã¤ãã®æ¡å¼µæ©è½ã使ç¨ãã¦ãã¾ããã颿° fun
ãå¼ã³åºããã¦ããéä¸ã«ããã¨ããfun.caller
ã¯ç´è¿ã® fun
ãå¼ã³åºãã颿°ã§ãfun.arguments
ã¯ãã® fun
ã®å¼ã³åºãã®ããã® arguments
ã§ããã©ã¡ãã®æ¡å¼µããå®å
¨ãªã JavaScript ã«ã¨ã£ã¦åé¡ãããã¾ãããªããªãããå®å
¨ãªãã³ã¼ãããç¹æ¨©çãªã颿°ã¨ãã®ï¼å®å
¨ã§ãªãå¯è½æ§ã®ããï¼å¼æ°ã«ã¢ã¯ã»ã¹ãããã¨ã許ãã¦ãã¾ãããã§ãã fun
ã峿 ¼ã¢ã¼ãã®å ´åã fun.caller
㨠fun.arguments
ã¯ã©ã¡ããåé¤ä¸å¯è½ãªããããã£ã§ãè¨å®ããããåå¾ããããããã¨ä¾å¤ãçºçãã¾ãã
function restricted() {
"use strict";
restricted.caller; // TypeError ãçºç
restricted.arguments; // TypeError ãçºç
}
function privilegedInvoker() {
return restricted();
}
privilegedInvoker();
åæ§ã«ã arguments.callee
ã対å¿ããªããªãã¾ããã峿 ¼ã¢ã¼ãã§ãªãå ´åã arguments.callee
ã¯å
å«é¢æ°ãåç
§ãã¾ãããã®ç¨éã¯å¼±ãã§ããå²ã颿°ã«ååãã¤ãã¦ãã ããã ããã«ã arguments.callee
ã¯é¢æ°ã®ã¤ã³ã©ã¤ã³åãªã©ã®æé©åã®å¦¨ãã«ãªãã¾ãã arguments.callee
ã«ã¢ã¯ã»ã¹ããå ´åãã¤ã³ã©ã¤ã³åããã¦ããªã颿°ã¸ã®åç
§ãæä¾ãããã¨ãå¯è½ã§ãªããã°ãªããªãããã§ãã峿 ¼ã¢ã¼ãã®é¢æ°ç¨ã® arguments.callee
ã¯åé¤ã§ããªãããããã£ã§ãè¨å®ãããåå¾ãããããã¨ã¨ã©ã¼ã¨ãªãã¾ãã
"use strict";
const f = function () {
return arguments.callee;
};
f(); // TypeError ãçºç
JavaScript ã®å°æ¥è¨ç» äºç´èªã®è¿½å
äºç´èªã¨ã¯ã夿°åã¨ãã¦ä½¿ç¨ã§ããªãèå¥åã®ãã¨ã§ãã峿 ¼ã¢ã¼ãã§ã¯ãããã§ãªãã¢ã¼ããããããã¤ãã®ååãäºç´ãã¦ãã¾ãããã®ä¸ã«ã¯ããã§ã«è¨èªã§ä½¿ç¨ããã¦ãããã®ãããã°ãå°æ¥ã®æ§ææ¡å¼µãå®è£ ããããããããã«äºç´ããã¦ãããã®ãããã¾ãã
峿 ¼ã¢ã¼ãã¸ã®ç§»è¡å³æ ¼ã¢ã¼ãã¯ãå¾ã ã«ç§»è¡ã§ããããã«è¨è¨ããã¦ãã¾ããåãã¡ã¤ã«ãåå¥ã«å¤æ´ãããã¨ãå¯è½ã§ããã颿°ã®ç²åº¦ã¾ã§å³æ ¼ã¢ã¼ãã«ç§»è¡ããããã¨ãå¯è½ã§ãã
æåã«ã½ã¼ã¹ã³ã¼ãã®ä¸é¨ã« "use strict"
ã追å ãããã®å¾ãæå³ã¥ãã®éãã«æ³¨æããªããããã¹ã¦ã®å®è¡ã¨ã©ã¼ãä¿®æ£ãããã¨ã§ãã³ã¼ããã¼ã¹ã峿 ¼ã¢ã¼ãã«ç§»è¡ãããã¨ãã§ãã¾ãã
'use strict';
ã追å ããã¨ã以ä¸ã®å ´åã«ã¯ã¹ã¯ãªããã®å®è¡åã« SyntaxError
ãçºçãã¾ãã
const n = 023;
with
ædelete
ã®å¤æ°åã¸ã®ä½¿ç¨ delete myVariable
eval
ã arguments
ã夿°åã颿°ã®å¼æ°åã«ä½¿ç¨implements
, interface
, let
, package
, private
, protected
, public
, static
, yield
function f(a, b, b) {}
{a: 1, b: 3, a: 7}
ããã®å¶éã¯å¾ã«åãé¤ããã¾ããï¼ãã° 1041128ï¼ããããã®ã¨ã©ã¼ã¯ãæç½ãªèª¤ããæªããç¿æ £ãæããã«ãããã®ã§ãããè¯ããã®ã§ãããããã®ã¨ã©ã¼ã¯ã³ã¼ããå®è¡ãããåã«çºçããã®ã§ãã³ã¼ããã©ã³ã¿ã¤ã ã«ãã£ã¦è§£éãããéãã容æã«çºè¦ãããã¨ãã§ãã¾ãã
æ°ããã©ã³ã¿ã¤ã ã¨ã©ã¼JavaScript ã§ä½¿ç¨ãããå ´åãããã¾ã§ã¨ã©ã¼ã¨ãããã¹ãç¶æ³ã§ã¯ é»ã£ã¦å¤±æãã¦ãã¾ããã峿 ¼ã¢ã¼ãã¯ãã®ãããªå ´åã«çºçãã¾ããããã³ã¼ããã¼ã¹ã«ãã®ãããªã±ã¼ã¹ãããã°ãä½ãå£ãã¦ããªããã¨ã確èªããããã«ãã¹ããå¿ è¦ã§ãããããã®ãããªã¨ã©ã¼ã¯ã颿°ã®ç²åº¦ã¬ãã«ã§ç¢ºèªãããã¨ãã§ãã¾ãã
ReferenceError
ãçºçãã¾ããããã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ãã®ããããã£ãè¨å®ããããã«ä½¿ç¨ããã¾ãããæå¾
ããã广ã¯ã»ã¨ãã©ããã¾ããããããå®éã«ã°ãã¼ãã«ãªãã¸ã§ã¯ãã«å¤ãéåããããã®ã§ããã°ãæç¤ºçã« globalThis
ã«ããããã£ã¨ãã¦ä»£å
¥ãã¦ãã ãããTypeError
ãçºçãã¾ãã峿 ¼ã¢ã¼ãã§ãªãå ´åãããã¯é»ã£ã¦å¤±æãã¾ããTypeError
ãçºçãã¾ãã峿 ¼ã¢ã¼ãã§ãªãå ´åãããã¯é»ã£ã¦å¤±æãã¾ããarguments.callee
ãstrictFunction.caller
ãstrictFunction.arguments
ã«ã¢ã¯ã»ã¹ãã㨠TypeError
ãçºçãã¾ããããã颿°ãå帰çã«å¼ã³åºãããã« arguments.callee
ã使ç¨ãã¦ããå ´åã¯ã代ããã«ååä»ã颿°å¼ã使ç¨ãã¦ãã ããããããã®éãã¯ãé常ã«å¾®å¦ãªéãã§ãããã¹ãã¹ã¤ã¼ãããã®ãããªå¾®å¦ãªå½¢ãæããªãã¨ãããã¨ãããå¾ã¾ãããããã®å·®ç°ãã³ã¼ãã®æå³ã¥ãã«å½±é¿ããªããã¨ã確èªããããã«ãã³ã¼ããã¼ã¹ã®æ éãªã¬ãã¥ã¼ãããããå¿ è¦ã§ãããã幸ããªãã¨ã«ããã®æ éãªã¬ãã¥ã¼ã¯ã颿°ã®ç²åº¦ãå¾ã ã«ä¸ãã¦è¡ããã¨ãã§ãã¾ãã
this
峿 ¼ã¢ã¼ãã§ãªãå ´åã f()
wã®ãããªé¢æ°å¼ã³åºããè¡ãã¨ã this
å¤ã¨ãã¦ã°ãã¼ãã«ãªãã¸ã§ã¯ããæ¸¡ããã¾ã¦ãããã峿 ¼ã¢ã¼ãã§ã¯ãããã undefined
ã«ãªãã¾ããã call
ã apply
ã§é¢æ°ãå¼ã³åºãããã¨ããå¤ãããªããã£ããªå¤ã ã£ãå ´åã this
ã¯ãªãã¸ã§ã¯ãã«ããã¯ã¹åããã¦ãã¾ããï¼undefined
ã null
ã®å ´åã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ãã«ãªãã¾ãï¼ã峿 ¼ã¢ã¼ãã§ã¯ãå¤ã¯å¤æãããããç½®ãæããããããããã¨ãªããç´æ¥æ¸¡ããã¾ãã
arguments
峿 ¼ã¢ã¼ãã§ãªãå ´åã arguments
ãªãã¸ã§ã¯ãã®å¤ã夿´ããã¨ã対å¿ããååä»ã弿°ã夿´ããã¾ãããã®ããã JavaScript ã¨ã³ã¸ã³ã®æé©åãè¤éã«ãªããã³ã¼ããèªã¿ã«ãããçè§£ãã«ãããªã£ã¦ãã¾ããã峿 ¼ã¢ã¼ãã§ã¯ã arguments
ãªãã¸ã§ã¯ãã¯ååä»ã弿°ã¨åãå¤ã§ä½æã»åæåããã¾ããã arguments
ãªãã¸ã§ã¯ãã¨ååä»ã弿°ã®ã©ã¡ãã夿´ãã¦ãããäºãã«åæ ããããã¨ã¯ããã¾ããã
eval
峿 ¼ã¢ã¼ãã®ã³ã¼ãã§ã¯ã eval
ã¯å¼ã³åºãããã¹ã³ã¼ãã«æ°ãã夿°ã使ãããã¨ã¯ããã¾ããããã¡ããå³å¯ã¢ã¼ãã§ã¯ãæååã¯å³å¯ã¢ã¼ãã®è¦åã§è©ä¾¡ããã¾ããä½ãå£ããªããã¨ã確èªããããã«ãå¾¹åºçãªãã¹ããè¡ãå¿
è¦ãããã¾ãã eval ãæ¬å½ã«å¿
è¦ã§ãªãå ´åã«ã¯ä½¿ç¨ããªããã¨ããã®ãç¾å®çãªè§£æ±ºçããããã¾ããã
峿 ¼ã¢ã¼ãã§ãªãå ´åããããã¯å ã®é¢æ°å®£è¨ã¯ãããã¯ã®å¤å´ã§ãè¦ããã¨ãã§ããå¼ã³åºããå¯è½ã§ãã峿 ¼ã¢ã¼ãã§ã¯ããããã¯å ã®é¢æ°å®£è¨ã¯ãããã¯ã®å é¨ã§ããè¦ããã¨ãã§ãã¾ããã
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