eval('({"suc":true})')以上是错误的,应该是:
eval('{"suc":true}')为什么?
发布于 2009-12-08 14:28:05
当尝试计算时,解释器看到花括号,并认为它是一个块的开始。将其括在圆括号中使其成为表达式并正确初始化对象。
发布于 2009-12-08 15:15:30
我不知道你想实现什么,但是从你的例子来看,第一个是正确的,第二个抛出了语法错误。
eval('({"suc":true})')与({"suc":true})相同,JavaScript将其解释为:
( // <- this states begining of expression
{ // <- this is hash/object literal begining
"suc": // <- this is property name, given as string
true // <- this is value
}
)因此它返回具有suc属性和关联值true的新对象。
eval('{"suc":true}')与{"suc":true}相同,解释为:
{ // <- this is block begining
"suc": // <- this is label, but incorrect, as it is given as string, not literally
true // <- this is expression
}如果您将"suc"更改为suc (不带括号),那么它可以工作,但它与第一个示例不同。
更新
至于为什么数组不需要括号:除了数组之外,JavaSript中没有其他以[字符开头的结构。
如果{出现在如下所期望值的上下文中,那么它不会有任何问题:
eval('var a = {"succ": true}')在源代码中也是如此(因此不仅仅是在eval块中):您不能使用短符号({ .. })创建对象,而不将其赋值给某个变量或将其作为值传递(到函数、返回语句...)。
发布于 2009-12-08 14:24:11
eval('({"suc":true})')实际上这并没有错,它会被正确评估的。
https://stackoverflow.com/questions/1864967
复制相似问题