为什么
eval('{pickup : new Date(2012, 7, 23, 15, 49, 0, 0)}')
工作和
eval('{"pickup" : new Date(2012, 7, 23, 15, 49, 0, 0)}')
没有?我得到了
Uncaught SyntaxError: Unexpected token :
at <anonymous>:1:1
然而
{"pickup" : new Date(2012, 7, 23, 15, 49, 0, 0)}
作为对象按预期工作。
答案 0 :(得分:7)
因为{}
被解释为一个块,而不是一个对象文字,这使pickup
成为label,而不是对象键。这就是Javascript看到的:
{
pickup:
new Date(2012, 7, 23, 15, 49, 0, 0);
}
如果您希望Javascript将其视为对象文字,请将其指定给某些内容,或者将其作为表达式而不是顶级语句。
答案 1 :(得分:5)
让我们看看第一个:
eval('{pickup : new Date(2012, 7, 23, 15, 49, 0, 0)}')
开始解析:
{
...因为我们不在语句环境中,必须是打开块括号。pickup:
是标签 new Date(...)
是一个新的约会对象,很简单。}
结束代码块。所以你看到它实际上没有做任何接近你期望的事情:)
现在尝试第二个:
eval('{"pickup" : new Date(2012, 7, 23, 15, 49, 0, 0)}')
同样的事情:
{
是打开块括号"pickup"
是一个字符串:
是......出乎意料的。语法错误!要修复,请强制使用表达式上下文:
eval('({pickup : new Date(2012, 7, 23, 15, 49, 0, 0)})')
这将为您提供一个引用新日期对象的pickup
属性的对象。