eval()の使用と互換性の問題


eval()の使用
eval()関数は、文字列をコードに変換して実行し、1つ以上の値を返します.
eval呼び出しの場合、例はeval(「(javascriptコード)」)です.
eval()の戻り値
eval()の戻り値は、以下の規則に従う.
  • eval()のパラメータが文字列ではない場合、eval()は直接パラメータに戻ります.
  • eval()のパラメータが文字列である場合、eval()はこの文字列をコードに解析して実行し、最後の行のコード実行の結果を返します.
  • 文字列が合法的なコードに解析できない場合、eval()はSyntxErrエラーをスローします.
  • 例1(evalのパラメータは文字列ではない):
    運転結果(Googleブラウザテスト):
    例2(evalのパラメータは文字列):
    運転結果(Googleブラウザテスト):
    もちろん、eval()メソッドを使用しない場合、上のコードは匿名関数を使用して書くことができます.
    例3(文字列は合法的なコードとして解析できません):
    運行結果(Googleブラウザテスト):Googleブラウザの操作台のエラーが表示されます.
    eval()の互換性の問題
    IE 6/7/8互換性がない
    テストコードはIE 8を使用します.
    var str = "function(){alert('Test eval')}";
    var fn = eval("(" + str + ")");
    fn();
    
    フレームをイジェクトしませんでした.コンソールがエラーを報告しました.
    解決方法:
    a)var s=「function(){alert('Test!')」;
    b)var s=「0?0:function(){alert('Test!')」;もちろんこの解決方法は海外のフォーラムから見つけられます.http://stackoverflow.com/ques...
    これはJScript解釈器の中にはバグがあります.これはIE 9で混雑モードや互換性を使用しない限り発生しません.IE 8はこの関数表現を関数として解釈しています.戻り値がないようにします.他の比較式を作成して、JScript解釈器で式を構成します.
    じゃ、IE 6/7/8はJScrip解釈器を使ってevalを解析します.パラメータ当初関数宣言を返していないので、eval()関数の中の文字列コードを式として書いてもいいですか?
    function(){alert('Test!')または0?0:function(){alert('Test!')の変更コード:
    var str = "0 ? 0 : function(){alert('Test eval')}";
    var fn = eval("(" + str + ")");
    fn();
    
    IE 8でテスト結果:
    最後にietesterツールを利用してテストしてもIE 6で同じです.