Baseline Widely available
è¦å: æååãã JavaScript ãå®è¡ãããã¨ã¯ãé常ã«å¤§ããªã»ãã¥ãªãã£ãªã¹ã¯ãä¼´ãã¾ããeval()
ã使ç¨ããã¨ãæªæã®ããè
ãä»»æã®ã³ã¼ããå®è¡ãããã¨ããã¾ãã«ãç°¡åã«ãªãã¾ããä¸è¨ã® eval() ã使ããªãã§ãã ãã!ãåç
§ãã¦ãã ããã
eval()
颿°ã¯ãæååã¨ãã¦è¡¨ç¾ããã JavaScript ã³ã¼ããè©ä¾¡ãã¾ããã½ã¼ã¹ã¯ã¹ã¯ãªããã¨ãã¦è§£éããã¾ãã
console.log(eval("2 + 2"));
// Expected output: 4
console.log(eval(new String("2 + 2")));
// Expected output: 2 + 2
console.log(eval("2 + 2") === eval("4"));
// Expected output: true
console.log(eval("2 + 2") === eval(new String("2 + 2")));
// Expected output: false
æ§æ 弿°
script
JavaScript ã®å¼ãæãã¾ãã¯ä¸é£ã®æã表ãæååã§ããå¼ã«ã¯ãæ¢åãªãã¸ã§ã¯ãã®å¤æ°ããã³ããããã£ãå«ãããã¾ããããã¯ã¹ã¯ãªããã¨ãã¦è§£éããã¾ãã®ã§ã import
宣è¨ï¼ã¢ã¸ã¥ã¼ã«ã®ä¸ã«åå¨ãããï¼ã¯è¨±å¯ããã¦ãã¾ããã
ä¸ããããã³ã¼ãã®è©ä¾¡çµæã®å¤ãè¿ãã¾ããè©ä¾¡çµæã空ã®å ´åã¯ãundefined
ãè¿ãã¾ãããã script
ãæååããªããã£ãã§ãªããã°ã eval()
ã¯å¼æ°ã夿´ããã«è¿ãã¾ãã
ã³ã¼ããè©ä¾¡ãã¦ããéã«çºçããããããä¾å¤ãçºçãã¾ãããã script
ãã¹ã¯ãªããã¨ãã¦è§£éã§ããªãã£ãå ´å㯠SyntaxError
ã«ãªãã¾ãã
eval()
ã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ãã®é¢æ°ããããã£ã§ãã
eval()
颿°ã®å¼æ°ã¯æååã§ãã ã½ã¼ã¹æååãã¹ã¯ãªããæ¬ä½ã¨ãã¦è©ä¾¡ãã¾ããã¤ã¾ããæã¨å¼ã®ä¸¡æ¹ã使ç¨å¯è½ã§ããã³ã¼ãã®å®äºå¤ãè¿ãã¾ããå¼ã®å ´åã¯ãå¼ãè©ä¾¡ãããå¤ã§ããå¤ãã®æã宣è¨ãåæ§ã«å®äºå¤ãæã¡ã¾ããããã®çµæã¯æå¤ãªãã®ã«ãªããã¨ãããã¾ãï¼ä¾ãã°ã代å
¥ã®å®äºå¤ã¯ä»£å
¥ãããå¤ã§ããã let
ã®å®äºå¤ã¯ undefined ã§ãï¼ããã®ãããæã®å®äºå¤ã«ã¯é ¼ããªããã¨ããå§ããã¾ãã
峿 ¼ã¢ã¼ãã§ã¯ã eval
ã¨ããååã®å¤æ°ã宣è¨ãããã eval
ã«ä»£å
¥ããããããã¨ã¯ SyntaxError
ã«ãªãã¾ãã
"use strict";
const eval = 1; // SyntaxError: Unexpected eval or arguments in strict mode
eval()
ã®å¼æ°ãæååã§ãªãå ´åãeval()
ã¯å¼æ°ã夿´ããã«è¿ãã¾ããæ¬¡ã®ä¾ã§ã¯ãããªããã£ãã®ä»£ããã« String
ãªãã¸ã§ã¯ããæ¸¡ãã¨ã eval()
ã¯æååãè©ä¾¡ããã®ã§ã¯ãªãã String
ãªãã¸ã§ã¯ããè¿ãã¾ãã
eval(new String("2 + 2")); // "2 + 2" ãå«ã String ãªãã¸ã§ã¯ããè¿ã
eval("2 + 2"); // 4 ãè¿ã
ä¸è¬çãªæ¹æ³ã§ãã®èª²é¡ããã¾ãåé¿ããã«ã¯ãeval()
ã«æ¸¡ãåã«ãèªåã§å¼æ°ãæååã«å¤æãããã¨ãã§ãã¾ãã
const expression = new String("2 + 2");
eval(String(expression)); // 4 ãè¿ãã¾ã
ç´æ¥çã¾ãã¯éæ¥ç㪠eval
eval()
ã®å¼ã³åºãã«ã¯ãç´æ¥ç㪠eval ã¨éæ¥ç㪠eval ã® 2 ã¤ã®ã¢ã¼ããããã¾ããç´æ¥ç㪠eval 㯠eval( )
ãå¯ä¸ã®å½¢ã§ãï¼å¼ã³åºã颿°ã®åå㯠eval
ã§ããã®å¤ã¯ã°ãã¼ãã«ãª eval
颿°ã§ãï¼ããã以å¤ã®ãã¹ã¦ ã¯ãã¨ã¤ãªã¢ã¹å¤æ°çµç±ãã¡ã³ãã¼ã¢ã¯ã»ã¹ããã®ä»ã®å¼çµç±ãã¾ãã¯ãªãã·ã§ãã«ãã§ã¼ã³ ?.
æ¼ç®åã使ç¨ãã¦å¼ã³åºããã¨ãå«ãã¦ã鿥çãªãã®ã§ãã
// eval ãè¿ãããã«ã«ã³ãæ¼ç®åã使ç¨ãã鿥çå¼ã³åºã
(0, eval)("x + y");
// ãªãã·ã§ãã«ãã§ã¼ã³ã«ãã鿥çå¼ã³åºã
eval?.("x + y");
// eval ãæ ¼ç´ãè¿ãããã«å¤æ°ã使ç¨ãã鿥çå¼ã³åºã
const geval = eval;
geval("x + y");
// ã¡ã³ãã¼ã¢ã¯ã»ã¹ã«ãã鿥çå¼ã³åºã
const obj = { eval };
obj.eval("x + y");
鿥ç㪠eval ã¯ãã³ã¼ããå¥åã® <script>
ã¿ã°ã®ä¸ã§è©ä¾¡ãããããã«è¦ããã¨ãã§ãã¾ããããã¯ã¤ã¾ã次ã®ãããªæå³ã§ãã
鿥ç㪠eval ã¯ãã¼ã«ã«ã¹ã³ã¼ãã§ã¯ãªãã°ãã¼ãã«ã¹ã³ã¼ãã§åä½ããè©ä¾¡ãããã³ã¼ãã¯å¼ã³åºãããã¹ã³ã¼ãå ã®ãã¼ã«ã«å¤æ°ã«ã¢ã¯ã»ã¹ãããã¨ã¯ããã¾ããã
function test() {
const x = 2;
const y = 4;
// ç´æ¥å¼ã³åºãããã¼ã«ã«ã¹ã³ã¼ãã使ç¨
console.log(eval("x + y")); // çµæã¯ 6
// eval ãè¿ãã«ã³ãæ¼ç®åã使ç¨ãã鿥å¼ã³åºã
console.log(eval?.("x + y")); // ã°ãã¼ãã«ã¹ã³ã¼ãã使ç¨ãx ã¯æªå®ç¾©ã®ããä¾å¤ãçºç
}
鿥ç㪠eval
ã¯å¨å²ã®ã³ã³ããã¹ãã®å³æ ¼ããç¶æ¿ãããã½ã¼ã¹æååèªä½ã« "use strict"
ãã£ã¬ã¯ãã£ããããå ´åã«ã®ã¿ 峿 ¼ã¢ã¼ã ã«ãªãã¾ãã
function strictContext() {
"use strict";
eval?.(`with (Math) console.log(PI);`);
}
function strictContextStrictEval() {
"use strict";
eval?.(`"use strict"; with (Math) console.log(PI);`);
}
strictContext(); // Logs 3.141592653589793
strictContextStrictEval(); // æååã峿 ¼ã¢ã¼ãã§ãããã SyntaxError ãçºçãã¾ãã
䏿¹ãç´æ¥ç㪠eval ã¯ãå¼ã³åºãã³ã³ããã¹ãã®å³æ ¼ããç¶æ¿ãã¾ãã
function nonStrictContext() {
eval(`with (Math) console.log(PI);`);
}
function strictContext() {
"use strict";
eval(`with (Math) console.log(PI);`);
}
nonStrictContext(); // Logs 3.141592653589793
strictContext(); // 峿 ¼ã¢ã¼ããªã®ã§ SyntaxError ãçºçãã¾ãã
ããã½ã¼ã¹æååã峿 ¼ã¢ã¼ãã§è§£éããã¦ããªãå ´åã var
ã§å®£è¨ããã夿°ã¨ 颿°å®£è¨ ã¯å¨å²ã®ã¹ã³ã¼ãã«å
¥ã£ã¦ãã¾ãã¾ãã峿 ¼ã¢ã¼ãã®ã³ã³ããã¹ãã§ã®ç´æ¥ç㪠eval ã§ãã£ãå ´åãã¾ã㯠eval
ã®ã½ã¼ã¹æååèªä½ã峿 ¼ã¢ã¼ãã§ãã£ãå ´åã var
ã¨é¢æ°å®£è¨ã¯å¨å²ã®ã¹ã³ã¼ãã«ãæ¼ããããã¨ã¯ããã¾ããã
// ã³ã³ããã¹ããã½ã¼ã¹æååã峿 ¼ã¢ã¼ãã§ã¯ãªãããã var ã¯å¨å²ã®ã¹ã³ã¼ãã§å¤æ°ã使ãã¾ãã
eval("var a = 1;");
console.log(a); // 1
// ã³ã³ããã¹ãã¯å³æ ¼ã§ã¯ããã¾ãããã eval ã®ã½ã¼ã¹ã¯å³æ ¼ãªã®ã§ã b ã¯è©ä¾¡ãããã¹ã¯ãªããã«ã¹ã³ã¼ãããã¾ãã
eval("'use strict'; var b = 1;");
console.log(b); // ReferenceError: b is not defined
function strictContext() {
"use strict";
// ã³ã³ããã¹ãã¯å³æ ¼ã§ãããããã¯éæ¥çãªãã®ã§ãæååã¯å³æ ¼ã§ã¯ããã¾ããã
eval?.("var c = 1;");
// å³å¯ãªã³ã³ããã¹ãã§ã®ãã£ã¬ã¯ãã£ã eval ãªã®ã§ã d ã¯ã¹ã³ã¼ãããã¾ãã
eval("var d = 1;");
}
strictContext();
console.log(c); // 1
console.log(d); // ReferenceError: d is not defined
è©ä¾¡ãããæååå
ã® let
ããã³ const
宣è¨ã¯ã常ã«ãã®ã¹ã¯ãªããã«ã¹ã³ã¼ãããã¾ãã
ãã£ã¬ã¯ãã£ã eval ã¯è¿½å ã®ã³ã³ããã¹ãå¼ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããä¾ãã°ã颿°ã®æ¬ä½ã§ new.target
ã使ç¨ãããã¨ãã§ãã¾ãã
function Ctor() {
eval("console.log(new.target)");
}
new Ctor(); // [Function: Ctor]
ç´æ¥ç㪠eval()
ã¯ããã¤ãã®åé¡ãå¼ãèµ·ããã¾ãã
eval()
ã¯å¼ã³åºãå
ã®æ¨©éã§æ¸¡ãããã³ã¼ããå®è¡ãã¾ããæªæã®ãã第ä¸è
ã«å½±é¿ãåããå¯è½æ§ã®ããæååã§ eval()
ãå®è¡ããã¨ããã®ã¦ã§ããã¼ã¸ãæ¡å¼µæ©è½ã®æ¨©éã«ããã¦ãã¦ã¼ã¶ã¼ã®ãã·ã³ä¸ã§æªæã®ããã³ã¼ããå®è¡ãã¦ãã¾ãå¯è½æ§ãããã¾ããããã«éè¦ãªãã¨ã«ããµã¼ããã¼ãã£ã®ã³ã¼ãã eval()
ãï¼ç´æ¥ç㪠eval ã§ããã°ï¼å¼ã³åºãããã¹ã³ã¼ããè¦ããã¨ãã§ãããããæ»æè
ããã¼ã«ã«å¤æ°ãèªã¿åã£ãã夿´ããããããã¨ãã§ãã¦ãã¾ãã¾ããeval()
ã¯ä»ã®æ¹æ³ãããä½éã§ããeval()
ã使ç¨ããã¨ããã©ã¦ã¶ã¼ã¯é·ãé«ä¾¡ãªå¤æ°åæ¤ç´¢ãå®è¡ãã¦ã夿°ãæ©æ¢°èªã®ã©ãã«åå¨ãã¦ããããææ¡ãããã®å¤ãè¨å®ãã¾ããããã«ãeval()
ã夿°ã®åã®å¤æ´ãªã©ããã®å¤æ°ã«æ°ãã夿°ãããããå¯è½æ§ããããçæããããã¹ã¦ã®æ©æ¢°èªãåè©ä¾¡ãã¦è£æ£ãããããå¯è½æ§ãããã¾ããeval()
ã«ãã£ã¦æ¨ç§»çã«ä¾åããã¦ããå ´åããããã¡ã¤ã¤ã¼ã¯ããåãããããã¾ããããããªã㨠eval()
ã¯å®è¡æã«æ£ãã夿°ãèªã¿è¾¼ããã¨ãã§ããªãããã§ããeval()
ãé¢é£ã®ã¡ã½ããã使ç¨ãããã¨ã§ãæé©åããããå®å
¨ã«é¿ãããã¨ãã§ããç¨éã¯ããããããã¾ãã
ãã®ã³ã¼ããèãã¦ã¿ã¦ãã ããã
function looseJsonParse(obj) {
return eval(`(${obj})`);
}
console.log(looseJsonParse("{ a: 4 - 1, b: function () {}, c: new Date() }"));
鿥ç eval ã使ç¨ãã¦å³æ ¼ã¢ã¼ããå¼·å¶ããã ãã§ãã³ã¼ãã¯ãã£ã¨è¯ããªãã¾ãã
function looseJsonParse(obj) {
return eval?.(`"use strict";(${obj})`);
}
console.log(looseJsonParse("{ a: 4 - 1, b: function () {}, c: new Date() }"));
ä¸è¨ã® 2 ã¤ã®ã³ã¼ãã¹ããããã¯åãããã«åä½ããããã«è¦ããããããã¾ããããããã§ã¯ããã¾ãããåè ã¯ç´æ¥ç eval ã使ç¨ãã¦ããã®ã§ãè¤æ°ã®åé¡ãçºçãã¾ãã
ããå¤ãã®ç¯å²ãæ¤æ»ãããããéå¸¸ã«æéããããã¾ããè©ä¾¡ãããæååä¸ã® c: new Date()
ã«æ³¨ç®ãã¦ãã ããã鿥ç eval ã®ãã¼ã¸ã§ã³ã§ã¯ããªãã¸ã§ã¯ãã¯ã°ãã¼ãã«ã¹ã³ã¼ãã§è©ä¾¡ãããã®ã§ãã¤ã³ã¿ã¼ããªã¿ã¼ã¯ Date
ã Date
ã¨ããååã®ãã¼ã«ã«å¤æ°ã§ã¯ãªããã°ãã¼ãã«ãª Date()
ã³ã³ã¹ãã©ã¯ã¿ã¼ãåç
§ãã¦ããã¨ã¿ãªããã¾ããããããç´æ¥ç eval ã使ç¨ããã³ã¼ãã§ã¯ãã¤ã³ã¿ã¼ããªã¿ã¼ã¯ãããæ³å®ãããã¨ãã§ãã¾ãããä¾ãã°ã次ã®ä¾ã§ã¯ãè©ä¾¡ãããæååã® Date
㯠window.Date()
ãåç
§ãã¾ããã
function looseJsonParse(obj) {
function Date() {}
return eval(`(${obj})`);
}
console.log(looseJsonParse(`{ a: 4 - 1, b: function () {}, c: new Date() }`));
ãããã£ã¦ããã® eval()
ãã¼ã¸ã§ã³ã§ã¯ããã©ã¦ã¶ã¼ã¯é«ä¾¡ãªã«ãã¯ã¢ããå¼ã³åºããè¡ããDate()
ã¨ãããã¼ã«ã«å¤æ°ããããã©ããã確èªãã¾ãã
峿 ¼ã¢ã¼ãã使ç¨ãã¦ããªãå ´åã eval()
ã½ã¼ã¹å
ã® var
宣è¨ã¯å¨å²ã®ã¹ã³ã¼ãã®å¤æ°ã«ãªãã¾ããããã¯ãæååãå¤é¨å
¥åããåå¾ãããå ´åãç¹ã«åãååã®æ¢åã®å¤æ°ãããå ´åã«ããããã°ãã«ãã課é¡ã«ã¤ãªããã¾ãã
ç´æ¥ç eval ã¯ãå¨å²ã®ã¹ã³ã¼ãã®ãã¤ã³ãã£ã³ã°ãèªã¿è¾¼ãã ãã夿´ããããããã¨ãã§ãã¾ãã
ç´æ¥ç eval
ã使ç¨ããå ´åãç¹ã« eval ã½ã¼ã¹ã峿 ¼ã¢ã¼ãã§ãããã¨ã証æã§ããªãå ´åã eval()
ã½ã¼ã¹ã¯ãã®å¨å²ã®ã¹ã³ã¼ãå
ã®ä»»æã®å¤æ°åã«ä¾åãããã¨ãã§ãããããã¨ã³ã¸ã³ï¼ããã³ãã«ããã¼ã«ï¼ã¯ã¤ã³ã©ã¤ã³åã«é¢é£ãããã¹ã¦ã®æé©åãç¡å¹ã«ããªããã°ãªãã¾ããã
ãããã鿥ç㪠eval()
ã使ç¨ããã¨ãè©ä¾¡ãããã½ã¼ã¹ãèªã¿è¾¼ãæ¢åã®ã°ãã¼ãã«å¤æ°ä»¥å¤ã®è¿½å ã®ãã¤ã³ãã£ã³ã°ã渡ããã¨ãã§ãã¾ãããè©ä¾¡ãããã½ã¼ã¹ãã¢ã¯ã»ã¹ãã¹ã追å ã®å¤æ°ãæå®ããå¿
è¦ãããå ´åã¯ãã³ã³ã¹ãã©ã¯ã¿ã¼ Function()
ã使ç¨ãããã¨ãæ¤è¨ãã¦ãã ããã
Function()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãä¸è¨ã®éæ¥ç eval ã®ä¾ã¨ã¨ã¦ãããä¼¼ã¦ãã¾ããã°ãã¼ãã«ã¹ã³ã¼ãã§æ¸¡ããã JavaScript ã½ã¼ã¹ãããã¼ã«ã«ãã¤ã³ãã£ã³ã°ãèªã¿è¾¼ãã ã夿´ããããããã¨ãªãè©ä¾¡ããã®ã§ãã¨ã³ã¸ã³ã¯ç´æ¥ eval()
ãå®è¡ãããããå¤ãã®æé©åãå®è¡ãããã¨ãã§ãã¾ãã
eval()
㨠Function()
ã®ç°ãªãç¹ã¯ãFunction()
ã«æ¸¡ãããæååã¯ã¹ã¯ãªããã¨ãã¦ã§ã¯ãªãã颿°æ¬ä½ã¨ãã¦è§£éã§ããã¨ãããã¨ã§ããä¾ãã°ã颿°æ¬ä½ã®æä¸ä½ã§ã¯ return
æã使ç¨ãããã¨ãã§ãã¾ãããã¹ã¯ãªããã®ä¸ã§ã¯ä½¿ç¨ã§ãã¾ããã
Function()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ã夿°ã弿°ã¨ãã¦æ¸¡ã㦠eval ã½ã¼ã¹å
ã§ãã¼ã«ã«ãã¤ã³ãã£ã³ã°ã使ãããå ´åã«æçã§ãã
function Date(n) {
return [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
][n % 7 || 0];
}
function runCodeWithDateFunction(obj) {
return Function("Date", `"use strict";return (${obj});`)(Date);
}
console.log(runCodeWithDateFunction("Date(5)")); // Saturday
eval()
㨠Function()
ã¯ã©ã¡ããæé»çã«ä»»æã®ã³ã¼ããè©ä¾¡ããã®ã§ã峿 ¼ãª CSP è¨å®ã§ã¯ç¦æ¢ããã¦ãã¾ããã¾ããä¸è¬çãªç¨éã§ã¯ eval()
ã Function()
ã«ä»£ãããããå®å
¨ãªï¼ããã¦ãããé«éãªï¼æ¹æ³ãä»ã«ãããã¾ãã
ããããã£åããããããã£èªä½ã¸ã®å¤æãè¡ãããã« eval()
ã使ç¨ããªãã§ãã ãããã¢ã¯ã»ã¹ããããªãã¸ã§ã¯ãã®ããããã£ãã³ã¼ããå®è¡ãããã¾ã§ããããªãå ´åã®ä¾ãèãã¦ã¿ã¾ãããããã㯠eval()
ã§è¡ããã¨ãã§ãã¾ãã
const obj = { a: 20, b: 30 };
const propName = getPropName(); // returns "a" or "b"
const result = eval(`obj.${propName}`);
ãã ããããã§ eval()
ã¯å¿
è¦ããã¾ãããå®éããã®ä½¿ãæ¹ã¯ãå§ãã§ãã¾ããããªããªã propName
ãæå¹ãªèå¥åã§ãªãã¨æ§æã¨ã©ã¼ã«ãªãããã§ããããã«ã getPropName
ãå¶å¾¡ãã颿°ã§ãªãå ´åãä»»æã®ã³ã¼ããå®è¡ãã¦ãã¾ãå¯è½æ§ãããã¾ãã代ããã«ããããã£ã¢ã¯ã»ãµã¼ã使ç¨ããã»ãããããéãã¦å®å
¨ã§ãã
const obj = { a: 20, b: 30 };
const propName = getPropName(); // "a" ã¾ã㯠"b" ãè¿ããã
const result = obj[propName]; // obj[ "a" ] 㯠obj.a ã¨åã
ãã®ã¡ã½ããã使ç¨ãã¦åå«ããããã£ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããeval()
ã使ãã¨ä»¥ä¸ã®ããã«ãªãã¾ãã
const obj = { a: { b: { c: 0 } } };
const propPath = getPropPath(); // "a.b.c" ãªã©ãè¿ã
const result = eval(`obj.${propPath}`); // 0
ããã§ eval()
ãåé¿ããã«ã¯ãããããã£ã®ãã¹ãåå²ããæ§ã
ãªããããã£ãã«ã¼ããããã¨ã§è¡ããã¨ãã§ãã¾ãã
function getDescendantProp(obj, desc) {
const arr = desc.split(".");
while (arr.length) {
obj = obj[arr.shift()];
}
return obj;
}
const obj = { a: { b: { c: 0 } } };
const propPath = getPropPath(); // "a.b.c" ãªã©ãè¿ã
const result = getDescendantProp(obj, propPath);
ããããã£ã®è¨å®ãåæ§ã«è¡ããã¨ãã§ãã¾ãã
function setDescendantProp(obj, desc, value) {
const arr = desc.split(".");
while (arr.length > 1) {
obj = obj[arr.shift()];
}
return (obj[arr[0]] = value);
}
const obj = { a: { b: { c: 0 } } };
const propPath = getPropPath(); // "a.b.c" ãªã©ãè¿ã
const result = setDescendantProp(obj, propPath, 1); // obj.a.b.c 㯠1 ã«ãªã
ããããå¶ç´ã®ãªãå ¥åã§ãã©ã±ããã¢ã¯ã»ããµã使ç¨ãããã¨ãå®å ¨ã§ã¯ããã¾ããããªãã¸ã§ã¯ãã¤ã³ã¸ã§ã¯ã·ã§ã³æ»æã許ãå¯è½æ§ãããã¾ãã
ã³ã¼ã«ããã¯ã®ä½¿ç¨JavaScript 第ä¸ç´é¢æ°ãåãã¦ããã颿°ãä»ã® API ã®å¼æ°ã¨ãããã夿°ããªãã¸ã§ã¯ãã®ããããã£ã«ä¿åããããããã¨ãã§ãã¾ããå¤ãã® DOM API ã¯ãããèæ ®ãã¦ä½ããã¦ããã®ã§ã次ã®ããã«æ¸ããã¨ãã§ãã¾ãï¼ã¾ããæ¸ãã¹ãã§ãï¼ã
// setTimeout(" ... ", 1000) ã使ã代ããã«
setTimeout(() => {
// â¦
}, 1000);
// elt.setAttribute("onclick", "â¦") ã使ã代ããã«
elt.addEventListener("click", () => {
// â¦
});
æååãé£çµããã«ãã©ã¡ã¼ã¿ã¼åãã颿°ã使ããæ¹æ³ã¨ãã¦ã¯ãã¯ãã¼ã¸ã£ãä½¿ãæ¹æ³ã便å©ã§ãã
JSON ã®ä½¿ç¨eval()
ã®å¼ã³åºãã«ä½¿ããã¨ãã¦ããæååãã³ã¼ãã§ã¯ãªããã¼ã¿ï¼ä¾ãã° "[1, 2, 3]"
ã§é
åã表ãï¼ãå«ããã®ã§ããã°ãJSON ã«åãæ¿ãããã¨ãæ¤è¨ãã¦ãã ããããã㯠JavaScript ã®ãµãã»ããã使ç¨ãããã¨ã§ãæååã§ãã¼ã¿ã表ç¾ãããã¨ãã§ãã¾ãã
JSON ã®æ§æã¯ JavaScript ã®æ§æã«æ¯ã¹ã¦å¶éããããå¤ãã®æå¹ãª JavaScript ãªãã©ã«ã JSON ã¨ãã¦ã¯è§£éãããªããã¨ã«æ³¨æãã¦ãã ãããä¾ãã°ãæå¾ã«ã«ã³ããä»ãããã¨ã¯ JSON ã§ã¯è¨±ããã¦ãããããªãã¸ã§ã¯ããªãã©ã«å ã®ããããã£åï¼ãã¼ï¼ã¯å¼ç¨ç¬¦ã§å²ãå¿ è¦ãããã¾ããå¾ã§ JSON ã¨ãã¦è§£æãããæååãçæããã«ã¯ãJSON ã·ãªã¢ã©ã¤ã¶ã¼ã使ãããã«ãã¦ãã ããã
ä»»æã®ã³ã¼ãã§ã¯ãªããæ³¨ææ·±ãå¶ç´ããããã¼ã¿ã渡ããã¨ã¯ãä¸è¬çã«ããèãã§ããä¾ãã°ãã¦ã§ããã¼ã¸ã®å 容ãåå¾ã§ããããè¨è¨ãããæ¡å¼µã§ããã°ãJavaScript ã³ã¼ãã®ä»£ããã« XPath ã使ã£ã¦åå¾ã«ã¼ã«ãå®ç¾©ã§ãã¾ãã
ä¾ eval() ã®ä½¿ç¨æ¬¡ã®ã³ã¼ãã§ã¯ãeval
ãå«ãã©ã¡ãã®æã 42 ãè¿ãã¾ããæåã®ã³ã¼ãã¯æåå "x + y + 1
" ãè©ä¾¡ãã¾ãã2 çªç®ã®ã³ã¼ãã¯æåå "42
" ãè©ä¾¡ãã¾ãã
const x = 2;
const y = 39;
const z = "42";
eval("x + y + 1"); // 42 ãè¿ããã
eval(z); // 42 ãè¿ããã
è©ä¾¡ãããæå¾ã®å¼ã«ã¤ãã¦
eval()
ã¯æå¾ã«è©ä¾¡ãããå¼ã®å¤ãè¿ãã¾ãã if
ã«ã¤ãã¦ã¯ãè©ä¾¡ãããæå¾ã®å¼ã¾ãã¯æã«ãªãã¾ãã
const str = "if (a) { 1 + 1 } else { 1 + 2 }";
let a = true;
let b = eval(str); // 2 ãè¿ããã
console.log(`b is: ${b}`); // b is: 2
a = false;
b = eval(str); // 3 ãè¿ããã
console.log(`b is: ${b}`); // b is: 3
次ã®ä¾ã§ã¯ eval()
ã使ç¨ãã¦æåå str
ãè©ä¾¡ãã¦ãã¾ãããã®æååã¯ãx
ã 5 ã§ããã° z
ã« 42 ã¨ããå¤ãå²ãå½ã¦ããããã§ãªããã° z
ã« 0 ã代å
¥ããã¨ãã JavaScript ã®æã§æ§æããã¦ãã¾ãã 2 ã¤ç®ã®æãå®è¡ãããã¨ã eval()
ã¯ãããã®æãçºçãããæã®éåãè©ä¾¡ã㦠z
ã«ä»£å
¥ãããå¤ãè¿ãã¾ãã
const x = 5;
const str = `if (x === 5) {
console.log("z is 42");
z = 42;
} else {
z = 0;
}`;
console.log("z is ", eval(str)); // z is 42 z is 42
è¤æ°ã®å¤ãå²ãå½ã¦ãå ´åã¯ãæå¾ã®å¤ãè¿ãã¾ãã
let x = 5;
const str = `if (x === 5) {
console.log("z is 42");
z = 42;
x = 420;
} else {
z = 0;
}`;
console.log("x is", eval(str)); // z is 42 x is 420
颿°å®ç¾©ã®æååã® eval
ã«ã¯å
é ã¨æ«å°¾ã« "(" 㨠")" ãå¿
è¦
// 颿°å®£è¨
const fctStr1 = "function a() {}";
// 颿°å®£è¨
const fctStr2 = "(function b() {})";
const fct1 = eval(fctStr1); // undefined ãè¿ãã¾ãããã°ãã¼ãã«é¢æ°ã¨ã㦠`a` ã使ããããã«ãªã
const fct2 = eval(fctStr2); // 颿° `b` ãè¿ã
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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