2017-08-17 39 views
0

我乱搞JavaScript控制台,并注意到为什么JavaScript中的语句会忽略对象字面值?

>> {}[1] 
[1] 

评估作为数组。经过一些更多的搞乱我发现

>> b = {}[1] 
undefined 

给我的未定义的预期结果。起初我以为花括号中被解释为一个块,但试图

>> {a:1}[1] 
[1] 

仍然给了我的[1]阵列。我希望如果它被解释为一个块,它会导致语法错误。为什么会这样?

更多信息:我从Don't understand why you should not use an object literal at the beginning of a statement发现,这可能是一个块,但是这并没有回答如何,这是不是一个语法错误,除非它是做一个超前,以确定它是否是一个对象字面或块,但它不是对象文字,因为它仍然评估为[1]

编辑:我在Chrome和Firefox的调试控制台和Node.js的命令行界面中试过。

+0

JavaScript是不可思议......这是值得watching- [链接](https://www.destroyallsoftware.com/talks/wat)(JavaScript的开始于1:20) – mm8511

+0

我觉得你已经回答了你自己题。在这种情况下它被解释为一个块。你可以做''hello'',它会返回''hello'''。但是,如果您尝试将此值存储在变量中,则会导致抛出错误。 –

回答

3

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

块内部,由label后跟number literal组成的表达式是有效的。

但这并没有回答如何,这是不是一个语法错误,除非它是做一个超前以确定它是否是一个对象字面或块

它并不需要向前看。由于{(即没有)的左侧是什么,所以这是一个块。

+0

哦,我的天啊。我甚至没有考虑过标签。 – duckbrain