ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript は構文チェックに eval または new Function を使用します_JavaScript のヒント

JavaScript は構文チェックに eval または new Function を使用します_JavaScript のヒント

WBOY
WBOYオリジナル
2016-05-16 18:18:271145ブラウズ

構文チェックには new Function() を使用します
eval() メソッドを無差別に使用することはできません。不適切なタイミングで eval() メソッドを使用すると、プログラム全体に問題が発生する可能性があります。
New Function() はそれほど大きな問題を引き起こしません。問題。 new Function() によって構築された関数は、どのような状況でもグローバル スコープで直接動作しますが、構文チェックのみを行う場合は、構築された new 関数を直接呼び出さない限り、スコープの問題によって予期しない結果が生じることはありません。 。

eval() が受け取るパラメータの前に「0」を追加します。
実際、これは IE のバグによるものです。何らかの理由で、IE で eval() を呼び出して関数を動的に構築したい場合。
例:
eval('(function(){ /* code here */ })');
IE での戻り値は未定義ですが、他のブラウザーではこれが正しく返されます。新しく構築された関数。
最も簡単で効果的な解決策は、すべての主要なブラウザで互換性を持たせるために、先頭に「0」を追加することです。
例:
eval('0,function(){ /* code here */ }');
注: IE9 の Chakra エンジンでは、この問題は解決されています。

配列オブジェクトの concat メソッドを使用して、新しい配列を生成します。
単一のオブジェクト パラメーターを、処理のために 1 つの要素のみを含む配列に変換するには、"[ ].concat() の形式を使用できます。 o)」。
例:

コードをコピー コードは次のとおりです:

var arr1 = [1,2 ];
var arr2 = [3,4];
arr1.concat(arr2);


another 1 つの方法は次のとおりです: if (!(o instanceof Array)) o = [o];
// ECMAScript 5 の isArray と比較すると、厳密さが不十分です。

ネチズンは次のように答えます。
1.eval は実際にはランダムに使用できません。
2. eval が IE で使用される場合、私の解決策は
3.Array を返すことです。 .prototype.concat.apply([1,2,3],[4,5,6]);
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。