eval()の使用と互換性の問題
1469 ワード
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を使用します.
解決方法:
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!')の変更コード:
最後にietesterツールを利用してテストしてもIE 6で同じです.
eval()関数は、文字列をコードに変換して実行し、1つ以上の値を返します.
eval呼び出しの場合、例はeval(「(javascriptコード)」)です.
eval()の戻り値
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で同じです.