js PropertyName

本文是一篇大水文,辣眼睛

js中给普通对象(对象字面量,ObjectLiteral)初始化,key值可以是动态的

var k = 'you'  
var m = {  
   [k]: 'are stupid'
} 
console.log(m)  
// output 
{you: "are stupid"}


另外注意:
var k = 'you'  
var m = {  
   ['k']: 'are stupid'
} 
console.log(m)  
// output 
{k: "are stupid"}

我感觉这里的中括号让我很困惑,求值符号?

我去翻了es5的bnf

PropertyName :  
   IdentifierName
   StringLiteral
   NumericLiteral

//另外
IdentifierName :  
    IdentifierStart
    IdentifierName IdentifierPart

然而 中括号的token类型是Punctuator,一点关系都没有

百思不得其解

难道是es6?

还真是

http://es6.ruanyifeng.com/#docs/object

es6标准的bff

2.png