为什么eval不能在这个代码片段中工作?

时间:2012-04-10 09:32:02

标签: javascript html json

我想知道以下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

2 个答案:

答案 0 :(得分:3)

代码有几个问题;

首先,您要告诉脚本创建新内容,但是您并没有告诉它要创建什么。如果您没有创建自定义对象,那么您正在创建一个Object对象,因此您需要告诉它:

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

现在您正在创建一个新的Object对象,您可以配置Color属性:

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

Here is a working fiddle

但是,为什么你首先使用eval? eval is evil

答案 1 :(得分:1)

  

为什么eval在这个代码段中不起作用?

因为您不能将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"}评估为并抛出错误。