为什么{key:value} [“key”]不起作用?

时间:2013-05-07 02:51:49

标签: javascript

1:{key:value}["key"]
2:({key:value})["key"]
我想知道JS解释器如何处理上述代码,以及为什么 1 不起作用以及为什么 2 有效?

1 个答案:

答案 0 :(得分:4)

我假设你问这个问题,因为你在JavaScript REPL(shell)中看到了这个效果。您使用的是一个JavaScript shell,它假设前导“{”开始一个块语句而不是一个对象文字。

例如,如果您使用Chrome浏览器附带的JavaScript解释器,则会看到以下内容:

> {key:"value"}["key"]
["key"]

在这里,Chrome看到你输入的块语句,然后是一个元素的数组,即字符串"key"。所以它用该表达式的结果作出响应,即数组["key"]

但并非所有炮弹都以这种方式运作。如果您将解释器与node.js一起使用,那么#1 为您工作!

$ node
> {key:"value"}["key"]
'value'
> 

在像Chrome这样的解释器中,您必须使用括号来告诉它您希望第一部分是对象文字。 (顺便说一下,这种技术可以保证在所有 shell中工作,包括节点)。

修改

正如其中一条评论中所指出的,如果您在实际脚本中的任何位置使用该构造在表达式上下文中,它将生成"value"。它在shell中的使用看起来令人困惑。

这一事实实际上是由Gary Bernhardt在着名的WAT video中利用的。