首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript评估

javascript评估
EN

Stack Overflow用户
提问于 2009-12-08 14:20:57
回答 4查看 525关注 0票数 0
代码语言:javascript
复制
eval('({"suc":true})')

以上是错误的,应该是:

代码语言:javascript
复制
eval('{"suc":true}')

为什么?

EN

回答 4

Stack Overflow用户

发布于 2009-12-08 14:28:05

当尝试计算时,解释器看到花括号,并认为它是一个块的开始。将其括在圆括号中使其成为表达式并正确初始化对象。

票数 4
EN

Stack Overflow用户

发布于 2009-12-08 15:15:30

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

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

代码语言: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}相同,解释为:

代码语言:javascript
复制
{ // <- 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中没有其他以[字符开头的结构。

如果{出现在如下所期望值的上下文中,那么它不会有任何问题:

代码语言:javascript
复制
eval('var a = {"succ": true}')

在源代码中也是如此(因此不仅仅是在eval块中):您不能使用短符号({ .. })创建对象,而不将其赋值给某个变量或将其作为值传递(到函数、返回语句...)。

票数 1
EN

Stack Overflow用户

发布于 2009-12-08 14:24:11

代码语言:javascript
复制
eval('({"suc":true})')

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1864967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档