の一部として文字列を実行し、私はJavaScriptで定義された文字列を持って言うことができますか?だからHTML/JavaScriptコード
もしそうなら、文字列の中に複数のコマンドを入れることはできますか?あなたがJavaScriptコード/式の評価/実行するためにeval()
を使用することができます
の一部として文字列を実行し、私はJavaScriptで定義された文字列を持って言うことができますか?だからHTML/JavaScriptコード
もしそうなら、文字列の中に複数のコマンドを入れることはできますか?あなたがJavaScriptコード/式の評価/実行するためにeval()
を使用することができます
eval
を使用できます。複数の文が実行されます。 しかし、一般的にはeval
を使用することは悪い考えです。ほとんどの場合、おそらくあなたがしようとしているものは、eval
なしで達成できます。
eval
非常にである可能性があります。フォームまたはURLのようなユーザのコードと一緒に使用すると危険です。 Cross-Site Scripting (XSS) attacksまであなたを開きます。ただそれを避けることは、eval
を通してそれを置く前に、this answerが言及し、入力を墨塗りすることはまっすぐでなく、非常にエラーが発生しやすいので、アクションの最良のコースです。
eval
を使用したあまり重要ではないいくつかの問題は、コードをデバッグするのが難しくなり、速度が遅くなるということです。ブラウザが他のコードと同じように最適化やキャッシュを行うことは難しくありません。
更新
私はもともとこれに答えますが、明示的にeval
はJavaScriptで呼び出すことができる唯一の方法ではありませんeval
ステートメントを使用しているとき、私はこれを言及することを怠っ驚いて。 code instead of a function referenceをsetTimeout
またはsetInterval
に渡すと、暗黙的にそのコードが評価されます。
// This evals:
setTimeout("doSomething()", 1000);
// This does not eval:
setTimeout(doSomething, 1000); // also shorter :)
eval
と全く同じではないが、Function
constructorもsimilar 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
コンストラクタとして文字列を使用する場合、注意がユーザーの入力がそれらに渡されようとしている場合は特に、注意が必要です。
も参照してください:
事前に
var k = "function(); a = a + 1;"
ありがとう::たとえば
var k = "var a = 0; alert(a); a = a + 1; alert(a);"
eval(k);
eval
機能を評価しますそれに渡される文字列。 slowです。これは、評価されるべきコードが現場で解析されなければならないので、いくつかのコンピューティングリソースを必要とするからです。
は 'のeval()' ... [チェックを使用しますここ](https://developer.mozilla.org/en-US/docs/We b/JavaScript/Reference/Global_Objects/eval)... –