次の 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
次の 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
コードにはいくつかの問題があります。
まず、何か新しいものを作成するようにスクリプトに指示していますが、何を作成するかは指示していません。カスタム オブジェクトを作成していない場合は、Object オブジェクトを作成しているため、次のことを伝える必要があります。
var p = eval('new Object()');
新しい Object オブジェクトを作成しているので、Color プロパティを構成できます。
var p = eval('new Object({"Color":"Red"})');
しかし、そもそもなぜ eval を使用しているのですか? eval は悪です!
このスニペットで 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"}
として評価されてエラーがスローされるため、括弧が必要です。