为什么不能使用"{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!
答案 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'})");