Javascript - eval()`{}`表达式

时间:2012-03-30 12:47:47

标签: javascript eval

为什么不能使用"{opacity: 1.0, width: '132px'}"来评估像eval()这样的字符串?

eval("{opacity: 1.0, width: '132px'}");

// invalid label
// {opacity: 1.0, width: '132px'}
// ---------------ꜛ

eval("v = {opacity: 1.0, width: '132px'}");

// works!

3 个答案:

答案 0 :(得分:6)

  

为什么不能使用eval()来评估像"{opacity: 1.0, width: '132px'}"这样的字符串?

因为文本出现在预期语句或块的位置,而不是表达式,因此{表示block的开头,而不是object initializer的开头。 (然后opacity:被解释为label后跟语句分隔符[逗号],然后width:看起来像另一个标签,在那里无效。)

将它放在括号中会更改解析上下文以便预期表达式,因此{会打开初始化程序。 (这与您在括号中看到自动执行的匿名函数的原因相同,例如(function(){ ... })();而不仅仅是function(){ ... }();。)

答案 1 :(得分:3)

  

为什么像{{opacity:1.0,width:'132px'}这样的字符串不能用eval()来评估?

因为{opacity: 1.0, width: '132px'}是无效的javascript原样。尝试按原样放置此语句,您将收到js错误。另一方面,v = {opacity: 1.0, width: '132px'}是有效的javascript。

答案 2 :(得分:1)

尝试这样的事情:

eval("({opacity: 1.0, width: '132px'})");