2012-04-10 6 views
0

私はいただきましたJavaScriptコードを以下と間違っ知りたいのですが - evalはこのスニペットでは動作しないのはなぜevalがこのスニペットで動作しないのはなぜですか?

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

あなたの質問に答えることはできませんが、どうしたらいいですか:var p = {"Color": "Red"} '? –

+0

達成しようとしていることは何ですか?なぜ 'var p = {" Color ":" Red "}'不十分ですか? –

+0

@ Kolink-そのコードはサーバーサイドのコードから埋め込まれ、動的です。 –

答えて

3

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

最初に、スクリプトに新しいものを作成するように指示していますが、作成するのはとは言いません。新しいObjectオブジェクトを作成していることを、あなたはColorプロパティを設定することができます今すぐ

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

:カスタムオブジェクトを作成していない場合は、あなたがいることを伝える必要がありますので、あなたは、Objectオブジェクトを作成している

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

Here is a working fiddle

しかし、なぜあなたが最初の場所ではevalを使用していますか? eval is evil

1

- それはと私にはJavaScriptエラーを与えている

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

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

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

オブジェクトにはnew operator [MDN]を使用することはできません。機能のみを使用することができます。

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

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

それともそれは静的なものである場合、直接オブジェクトリテラルを作成します。

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

それはevalwhich you should avoid to use anyway)で動作させるために、newを削除し、括弧内にリテラルをラップ:

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

The parenthesis are necessary JavaScriptは{"Color":"Red"}と評価されるため、ブロックとエラーをスローします。