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

Nik*_*s R 1 javascript eval

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

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

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

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

// works!
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

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

因为文本出现在期望语句或块的地方,而不是表达式,因此{表示的开头,而不是对象初始化器的开头.(然后opacity:被解释为标签后跟语句分隔符[逗号],然后width:看起来像另一个标签,在那里无效.)

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