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 ?评估是邪恶的

于 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 回答