2016-04-22 7 views
1

の一部として文字列を実行し、私はJavaScriptで定義された文字列を持って言うことができますか?だからHTML/JavaScriptコード

もしそうなら、文字列の中に複数のコマンドを入れることはできますか?あなたがJavaScriptコード/式の評価/実行するためにeval()を使用することができます

+0

は 'のeval()' ... [チェックを使用しますここ](https://developer.mozilla.org/en-US/docs/We b/JavaScript/Reference/Global_Objects/eval)... –

答えて

1

evalを使用できます。複数の文が実行されます。 しかし、一般的にはevalを使用することは悪い考えです。ほとんどの場合、おそらくあなたがしようとしているものは、evalなしで達成できます。

eval非常にである可能性があります。フォームまたはURLのようなユーザのコードと一緒に使用すると危険です。 Cross-Site Scripting (XSS) attacksまであなたを開きます。ただそれを避けることは、evalを通してそれを置く前に、this answerが言及し、入力を墨塗りすることはまっすぐでなく、非常にエラーが発生しやすいので、アクションの最良のコースです。

evalを使用したあまり重要ではないいくつかの問題は、コードをデバッグするのが難しくなり、速度が遅くなるということです。ブラウザが他のコードと同じように最適化やキャッシュを行うことは難しくありません。

更新

私はもともとこれに答えますが、明示的にevalはJavaScriptで呼び出すことができる唯一の方法ではありませんevalステートメントを使用しているとき、私はこれを言及することを怠っ驚いて。 code instead of a function referencesetTimeoutまたはsetIntervalに渡すと、暗黙的にそのコードが評価されます。

// This evals: 
setTimeout("doSomething()", 1000); 
// This does not eval: 
setTimeout(doSomething, 1000); // also shorter :) 

evalと全く同じではないが、Function constructorsimilar security concerns associated with itを持っています。ただ、evalと同じように

let xss = 'alert("XSS")'; 
 

 
// whatever is in the string passed to Function 
 
// becomes the body of the function 
 
let doSomething = new Function(xss); 
 

 
document.querySelector('button').addEventListener('click', doSomething, false);
<button>Do Something</button>

setTimeoutの入力、setIntervalまたはFunctionコンストラクタとして文字列を使用する場合、注意がユーザーの入力がそれらに渡されようとしている場合は特に、注意が必要です。

も参照してください:

0

事前に

var k = "function(); a = a + 1;" 

ありがとう::たとえば

var k = "var a = 0; alert(a); a = a + 1; alert(a);" 
 
eval(k);

0

eval機能を評価しますそれに渡される文字列。 slowです。これは、評価されるべきコードが現場で解析されなければならないので、いくつかのコンピューティングリソースを必要とするからです。