4

JSlintを使用してJavaScriptを検証します。

evalは悪だというエラーが表示されます。なぜこれがあり、私が使用できる代替手段がありますか?

これは、私がevalを使用していて、その回避策が必要な場合の例です。

私はこのような配列を持っています:

var Resources = {
message_1: 'Message 1',
message_2: 'Message 2',
message_3: 'Message 3',
message_4: 'Message 4'
};

1、2、3、または4のいずれかの数値を返す関数(functionResult)があります。したがって、次のコード行で実行したいのは、関数の結果でメッセージが終了する配列内のリソースを取得することです。 。

$('#divPresenter').html(eval($.validator.format('Resources.message_{0}', functionResult)));

evalを削除して他のものに置き換える方法はありますか?

4

6 に答える 6

9

それ以外の:

eval($.validator.format('Resources.message_{0}', functionResult))

使用するだけです:

Resources["message_" + functionResult]

JavaScriptのすべてのオブジェクトは、実際には連想配列(別名ハッシュ)であり、ドット構文(a.b)は、ハッシュ()で何かを検索するための単なる構文糖衣ですa['b']。したがって、まったく必要ありませんeval。キーを文字列として作成し、そのキーを使用して値を検索するだけです。

于 2010-10-25T01:13:16.127 に答える
8

リンク

ほとんどの場合、evalは、ハエを叩くハンマーのように使用されます。これで作業は完了しますが、パワーが大きすぎます。遅くて扱いにくく、間違えるとダメージが大きくなる傾向があります。

于 2010-10-20T23:33:17.037 に答える
5

文字列をコードとして実行でき、その文字列がどこから来たのか、何が含まれているのかを誰が知っているので、それは悪いことです。

そして、はい、99.9%の確率で、より良い選択肢があります(これらが正確に何であるかは、使用している目的によって異なりますeval)。残りの0.1%の時間は、実際に使用するしかありません。evalそのような場合は、非常に注意する必要があります。

于 2010-10-20T23:41:48.727 に答える
3

JS Lintには、DouglasCrockfordがJavaScriptのベストプラクティスであると見なしているものが組み込まれています。彼が強く推奨しない機能の1つはですeval。彼はそれが遅くて安全ではないと考えていると思います。

問題のコードに応じて、多くの潜在的な代替案が存在する可能性があります。を使用するコードのセクションを投稿したい場合はeval、より具体的なアドバイスを提供できます。

于 2010-10-20T23:34:00.217 に答える
3

evalを使用して文字列をJSONオブジェクトに変換しようとしている場合は、おそらくJSONパーサーライブラリを試してください(私はこれを使用したことはありませんが、妥当なように見えます)。

于 2010-10-20T23:36:42.950 に答える
2

私はあなたが何をしているのか完全にはわかりませんが、次のよう
$('#divPresenter').html(eval($.validator.format('Resources.message_{0}', functionResult)));
に書くことができるようです
$('#divPresenter').html(Resources["message_" + functionResult]);

于 2010-10-25T01:20:04.323 に答える