çµã¿è¾¼ã¿ã® eval 颿°ã使ãã¨ã³ã¼ãæååãå®è¡ãããã¨ãã§ãã¾ãã
æ§æ:
let result = eval(code);
ä¾:
let code = 'alert("Hello")';
eval(code); // Hello
ã³ã¼ãã®æååã¯é·ãã£ãããæ¹è¡ã颿°å®ç¾©ã夿°ãå«ãã§ããå¯è½æ§ãããã¾ãã
eval ã®çµæã¯æå¾ã®æã®çµæã§ãã
ä¾:
let value = eval('1+1');
alert(value); // 2
let value = eval('let i = 0; ++i');
alert(value); // 1
eval ãããã³ã¼ãã¯ç¾å¨ã®ã¬ãã·ã«ã«ç°å¢ã§å®è¡ããããããå¤é¨å¤æ°ãåç §ãããã¨ãã§ãã¾ãã:
let a = 1;
function f() {
let a = 2;
eval('alert(a)'); // 2
}
f();
åæ§ã«å¤é¨å¤æ°ã夿´ãããã¨ãã§ãã¾ã:
let x = 5;
eval("x = 10");
alert(x); // 10, å¤ã®å¤æ´
strict ã¢ã¼ãã§ã¯ãeval ã¯ç¬èªã®ã¬ãã·ã«ã«ç°å¢ãæã¡ã¾ãããã®ãããeval å
ã§å®£è¨ããã颿°ã夿°ã¯å¤å´ã§ã¯è¦ãã¾ããã:
// å®è¡å¯è½ãªä¾ã§ã¯ã'use strict' ã¯ããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ã
eval("let x = 5; function f() {}");
alert(typeof x); // undefined (ãã®ãããªå¤æ°ã¯ããã¾ãã)
// function f ãè¦ãã¾ãã
use strict ããªããã°ãeval ã¯ç¬èªã®ã¬ãã·ã«ã«ç°å¢ãæããªãã®ã§ãå¤å´ãã x ã fãè¦ããã¨ãã§ãã¾ãã
âevalâ ãå©ç¨ãã
ã¢ãã³ããã°ã©ãã³ã°ã§ã¯ãeval ã¯éå¸¸ã«æ§ããã«ä½¿ç¨ããã¾ãããã°ãã° âeval ã¯æªâ ã¨è¨ããã¾ãã
çç±ã¯ç°¡åã§ã: ãã£ã¨æãJavaScript ã¯ä»ãããã£ã¨å¼±ãè¨èªã§ãããå¤ãã®ãã¨ã¯ eval ã§ããã§ãã¾ããã§ãããã§ããããããã 10å¹´ãçµéãã¾ããã
ç¾å¨ã¯ãeval ãå©ç¨ããçç±ã¯ã»ã¨ãã©ããã¾ããããã誰ããããã使ç¨ãã¦ãããªããã¢ãã³ãªè¨èªæ§é ãããã㯠JavaScript Moduleã«ç½®ãæããããæ©ä¼ã§ãã
å¤é¨å¤æ°ã«ã¢ã¯ã»ã¹ããæ©è½ã«ã¯å¯ä½ç¨ããããã¨ã«æ³¨æãã¦ãã ããã
ã³ã¼ãã® minifier (JSãæ¬çªç°å¢ã«é©ç¨ããåã«ä½¿ããããã¼ã«ã§ãJSãå§ç¸®(minify)ãã¾ã)ã¯æé©åã®ããã«ããã¼ã«ã«å¤æ°ãããçããã®ã«ç½®ãæãã¾ããããã¯é常å®å
¨ã§ãããeval ã使ããã¦ããå ´åãããããåç
§ããå¯è½æ§ãããããå®å
¨ã§ã¯ããã¾ããããããã£ã¦ãminifier 㯠eval ããè¦ããå¯è½æ§ã®ãããã¹ã¦ã®ãã¼ã«ã«å¤æ°ãç½®ãæãã¾ãããããã¯ã³ã¼ãã®å§ç¸®çã«æªå½±é¿ãåã¼ãã¾ãã
eval ã®å
é¨ã§å¤é¨ã®ãã¼ã«ã«å¤æ°ã使ç¨ãããã¨ã¯ãã³ã¼ãã®ã¡ã³ããã³ã¹ãããé£ããããããããããã©ã¯ãã£ã¹ã¨ããã¦ãã¾ãã
ãã®ãããªåé¡ã«å¯¾ããå®å ¨ã«å®å ¨ã«ããæ¹æ³ã¯2ã¤ã§ãã
eval ãããã³ã¼ããå¤é¨å¤æ°ã使ç¨ãã¦ããªãå ´åãeval ã window.eval(...) ã§å¼ã³åºãã¦ãã ãã
ãã®æ¹æ³ã§ã¯ãã³ã¼ãã¯ã°ãã¼ãã«ã¹ã³ã¼ãã§å®è¡ããã¾ãã:
let x = 1;
{
let x = 5;
window.eval('alert(x)'); // 1 (ã°ãã¼ãã«å¤æ°)
}
eval ãããã³ã¼ãããã¼ã«ã«å¤æ°ãå¿
è¦ã¨ããå ´åãeval ã new Function ã«å¤æ´ãã弿°ã¨ãã¦ããããæ¸¡ãã¦ãã ãã
let f = new Function('a', 'alert(a)');
f(5); // 5
new Function ã«ã¤ãã¦ã¯ãã£ãã¿ã¼ "new Function" æ§æ ã§èª¬æãã¦ãã¾ããããã¯æååãã颿°ã使ããã°ãã¼ãã«ã¹ã³ã¼ãã«ãªãã¾ãããã®ããããã¼ã«ã«å¤æ°ã¯è¦ãã¾ãããã§ãããä¸è¨ã®ä¾ã®ããã«ã弿°ã¨ãã¦æç¤ºçã«æ¸¡ãã»ããã¯ããã«æç½ã§ãã
ãµããª
eval(code) ã®å¼ã³åºãã¯ã³ã¼ãæååãå®è¡ããæå¾ã®æã®çµæãè¿ãã¾ãã
- é常ã¯å¿ è¦ãªããããã¢ãã³ JavaScript ã§ã¯ãã£ãã«ä½¿ããã¾ããã
- å¤é¨ã®ãã¼ã«ã«å¤æ°ã«ã¢ã¯ã»ã¹ã§ãã¾ããããã¯ããããã©ã¯ãã£ã¹ã¨ããã¦ãã¾ãã
- 代ããã«ãã°ãã¼ãã«ã¹ã³ã¼ãã§ã³ã¼ãã
evalããã«ã¯window.eval(code)ã使ãã¾ãã - ãããã¯ãå¤é¨ã¹ã³ã¼ãããä½ããã®ãã¼ã¿ãå¿
è¦ãªå ´åã¯
new Functionã使ã弿°ã¨ãã¦ãããæ¸¡ãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã