2009-12-08 33 views
0
eval('({"suc":true})') 

以上是错误的,应该是:的JavaScript的eval

eval('{"suc":true}') 

为什么?

+3

难道不是相反吗? – 2009-12-08 06:24:59

回答

0
eval('({"suc":true})') 

这实际上没有错,它会被正确评估。

4

当试图评估解释器看到花括号,并认为它是一个块的开始。用括号括起来使其成为表达式并正确初始化对象。

1

我不知道你想达到什么,但从你的例子第一个是正确的,第二个抛出语法错误。

eval('({"suc":true})')相同({"suc":true})和JavaScript解释为:

因此,它与suc属性和相关值true返回新对象。

eval('{"suc":true}')相同{"suc":true}和被解释为:如果更改"suc"suc(没有括号),那么它会工作

{ // <- this is block begining 
    "suc": // <- this is label, but incorrect, as it is given as string, not literally 
     true // <- this is expression 
} 

,但它是不一样的第一个例子。

UPDATE

至于为什么阵列不需要括号:存在JavaSript没有其他的结构,它会开始比阵列之外[字符。

会有与{没有问题,如果它会在上下文中显示并预计值是这样的:

eval('var a = {"succ": true}') 

它的源代码(所以不仅在eval块)一样的:你不能使用短符号({ .. })创建对象,而不将其分配给某个变量或作为值传递给函数(返回语句...)。

+0

任何想法,而阵列不需要括号:var arr = eval('[true,false']); – 2012-08-20 08:47:52

+0

@lzprgmr看到我更新的答案。 – MBO 2012-08-20 11:25:18

0

您是否尝试过使用JSON.parse('{"suc":true}))