首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么bare Array是有效的Javascript语法,而不是bare object?

为什么bare Array是有效的Javascript语法,而不是bare object?
EN

Stack Overflow用户
提问于 2013-06-29 23:59:17
回答 4查看 252关注 0票数 3

在我的Javascript控制台(在Chrome中),我尝试这样做:

代码语言:javascript
复制
 { 'a' : 1 }

和获取SyntaxError: Unexpected token :

但这是可行的:

代码语言:javascript
复制
 ['a', 1]

怎么回事?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-30 00:03:14

这是因为花括号有两个用途--或者引入一个块,或者作为一个对象文字的开始(后者是一个表达式)。

控制台无法分辨出是哪一个,因此它假定了一个语句块,直到后来才发现该块的内容不能被解析为语句。

对于带有方括号的数组文字,这种歧义不存在。

可以通过改变上下文以使得{...}必须被解释为表达式而不是语句块,例如通过使其成为运算符的or、将其括在圆括号中、或将其作为函数参数传递等来解决歧义。

票数 7
EN

Stack Overflow用户

发布于 2013-06-30 00:02:23

这是一个数据块

代码语言:javascript
复制
{
    var x = 'stuff'
    function doStuff(arg) { alert(arg) }
    doStuff(x)
}

它会提醒stuff

现在,关于您的示例: JavaScript认为它是一个块,如下所示:

代码语言:javascript
复制
{
    'a' : 1
}

因为'a' : 1 is a valid语句,所以它失败了。

请注意,如果您这样做

代码语言:javascript
复制
'x' + { 'a' : 1 }

它是有效的,因为块不可能在+之后出现。

票数 3
EN

Stack Overflow用户

发布于 2013-06-30 00:03:35

为此,您可以使用new Object({'a' : 1})

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

https://stackoverflow.com/questions/17382024

复制
相关文章

相似问题

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