eval() を使わないでください!
直接的な eval() はいくつもの問題を引き起こします。eval() は
呼び出し元の権限で渡されたコードを実行
します。悪意のある第三者に影響を受ける可能性のある文字列で eval() を実行すると、そのウェブページや拡張機能の権限において、ユーザーのマシン上で悪意のあるコードを実行してしまう可能性
があります。さらに重要なことに、サードパーティのコードが eval() が(直接的な eval であれば)呼び出されたスコープを見ることができる
ため、攻撃者がローカル変数を読み取ったり変更したりすることができてしまいます。
- 悪意のあるコードを自分のパソコンの権限で実行してしまい悪さをする
- サードパーティとは?
- サードパーティのコードとは?
現代の JavaScript では多くの構造が JS エンジンによって最適化されているため、eval() は他の方法よりも低速です。
現代の JavaScript インタープリターは JavaScript を機械語に変換します。これは、変数の名前の概念がすべて消滅することを意味
します。したがって、eval() を使用すると、ブラウザーは長い高価な変数名検索を実行して、変数が機械語のどこに存在しているかを把握し、その値を設定します。さらに、eval() が変数の型の変更など、その変数に新しい変数をもたらす可能性もあり、生成されたすべての機械語を再評価して補正させられる可能性があります。
スコープが eval() によって推移的に依存されている場合、ミニファイヤーはミニ化をあきらめます
。そうしないと eval() は実行時に正しい変数を読み込むことができないからです。
eval() や関連のメソッドを使用することで、最適化したり、完全に避けることができる用途はたくさんあります。
- スコープとは?
- インタープリターとは
感想
任意のスクリプトを実行できるから危ないらしいがどういう風に書き変えるのか?
調べても難しかった。
evalは使わないようにしたい