0

次の JavaScript コードの何が問題なのか知りたい -

<html>
<script type="text/javascript">

var p = eval('new { "Color":"Red"}');

alert(p.Color);
</script>
</html>

それは私にJavaScriptエラーを与えています-

Message: Object doesn't support this action
Line: 4
Char: 1
Code: 0
4

2 に答える 2

3

コードにはいくつかの問題があります。

まず、何か新しいものを作成するようにスクリプトに指示していますが、何を作成するかは指示していません。カスタム オブジェクトを作成していない場合は、Object オブジェクトを作成しているため、次のことを伝える必要があります。

var p = eval('new Object()');

新しい Object オブジェクトを作成しているので、Color プロパティを構成できます。

var p = eval('new Object({"Color":"Red"})');

これが実用的なフィドルです

しかし、そもそもなぜ eval を使用しているのですか? eval は悪です!

于 2012-04-10T09:42:50.310 に答える
1

このスニペットで eval が機能しないのはなぜですか?

new演算子[MDN]はオブジェクトでは使用できず、関数でのみ使用できるためです。

{"Color":"Red"}関数としてではなく、オブジェクト リテラルとして評価されます。

JSON を解析する場合は、JSON.parse [MDN]を使用します。JSON.parse と eval()も参照してください。

または、静的な場合は、オブジェクト リテラルを直接作成します。

var p = {"Color":"Red"};

それを機能させるにはevalとにかく使用を避ける必要がありますnew)、リテラルを削除して括弧で囲みます:

var p = eval('({"Color":"Red"})');

そうしないと、JavaScript がブロック{"Color":"Red"}として評価されてエラーがスローされるため、括弧が必要です。

于 2012-04-10T09:40:45.233 に答える