1:{key:value}["key"]
2:({key:value})["key"]
我想知道JS解释器如何处理上述代码,以及为什么 1 不起作用以及为什么 2 有效?
答案 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中利用的。