为什么JavaScript中的语句会忽略对象文字?

为什么JavaScript中的语句会忽略对象文字?,javascript,javascript-objects,Javascript,Javascript Objects,我在JavaScript控制台周围乱搞,注意到 >> {}[1] [1] 作为数组计算。我又胡闹了一会儿,才发现 >> b = {}[1] undefined 给我未定义的预期结果。起初,我认为花括号被解释为一个块,但尝试 >> {a:1}[1] [1] 仍然给了我[1]数组。我预计,如果将其解释为块,将导致语法错误。为什么会这样 更多信息:我从中发现,它可能是一个块,但这并不能回答为什么这不是一个语法错误,除非它在进行前瞻以确定它是对象文字还是块,但它

我在JavaScript控制台周围乱搞,注意到

>> {}[1]
[1]
作为数组计算。我又胡闹了一会儿,才发现

>> b = {}[1]
undefined
给我未定义的预期结果。起初,我认为花括号被解释为一个块,但尝试

>> {a:1}[1]
[1]
仍然给了我
[1]
数组。我预计,如果将其解释为块,将导致语法错误。为什么会这样

更多信息:我从中发现,它可能是一个块,但这并不能回答为什么这不是一个语法错误,除非它在进行前瞻以确定它是对象文字还是块,但它不是对象文字,因为它仍在计算
[1]

编辑:我在Chrome和Firefox的调试控制台和Node.js的命令行界面中尝试了这一点

我预计,如果将其解释为块,将导致语法错误。为什么会这样

在块内,由后跟的组成的表达式是有效的

但这并不能回答为什么这不是一个语法错误,除非它做了一个前瞻来确定它是一个对象文本还是一个块

它不需要向前看。它是一个块,因为
{
的左侧有什么(即无)

我希望如果它被解释为一个块,它会导致语法错误。为什么会这样

在块内,由后跟的组成的表达式是有效的

但这并不能回答为什么这不是一个语法错误,除非它做了一个前瞻来确定它是一个对象文本还是一个块


它不需要向前看。它是一个块,因为
{
(即无任何内容)。

Javascript很奇怪…值得一看-[link]()(Javascript从1:20开始)我觉得你已经回答了你自己的问题。在这种情况下,它被解释为一个块。你可以做
{}“你好”
,它将返回
“hello”
。但是,如果您尝试将此值存储在变量中,则会抛出错误。Javascript很奇怪……值得一看-[link]()(Javascript从1:20开始)我觉得您已经回答了自己的问题。在这种情况下,它被解释为一个块。您可以执行
{}“hello”
,它将返回
“hello”
。但是,如果尝试将此值存储在变量中,则会抛出错误。