我想知道以下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
答案 0 :(得分:3)
代码有几个问题;
首先,您要告诉脚本创建新内容,但是您并没有告诉它要创建什么。如果您没有创建自定义对象,那么您正在创建一个Object对象,因此您需要告诉它:
var p = eval('new Object()');
现在您正在创建一个新的Object对象,您可以配置Color属性:
var p = eval('new Object({"Color":"Red"})');
但是,为什么你首先使用eval? eval is evil!
答案 1 :(得分:1)
为什么eval在这个代码段中不起作用?
因为您不能将new
operator [MDN]与对象一起使用,只能使用函数。
{"Color":"Red"}
被评估为对象文字,而不是函数。
如果要解析JSON,请使用JSON.parse
[MDN]。另请参阅JSON.parse vs. eval()。
或直接创建对象文字,如果它是静态的:
var p = {"Color":"Red"};
要使其与eval
(which you should avoid to use anyway)一起使用,请删除new
并将文字括在括号中:
var p = eval('({"Color":"Red"})');
The parenthesis are necessary因为否则JavaScript会将{"Color":"Red"}
评估为块并抛出错误。