ES6对象方法赋值之间的区别:a,'a'和['a']?

aps*_*nce 4 javascript ecmascript-6

使用ES6,我可以使用以下函数创建一个新对象:

var obj = {
    something() {}
};
Run Code Online (Sandbox Code Playgroud)

那讲得通.但我也可以这样做:

var obj = {
    'something'() {}
};
Run Code Online (Sandbox Code Playgroud)

或者我可以这样做:

var obj = {
    ['something']() {}
};
Run Code Online (Sandbox Code Playgroud)

这三种语法之间有区别吗?为什么所有这些语法都有效?

Fel*_*ing 6

这三种语法之间有区别吗?

不是你的例子中的结果.

但是,不同的语法确实具有不同的特征.定义属性名称的方式不是特定于方法定义btw,规则适用于所有属性名称:


为什么所有这些语法都有效?

因为语法允许它:

MethodDefinition :
    PropertyName ( StrictFormalParameters ) { FunctionBody }
    GeneratorMethod
    get PropertyName ( ) { FunctionBody }
    set PropertyName( PropertySetParameterList ) { FunctionBody }

PropertyName :
    LiteralPropertyName
    ComputedPropertyName

LiteralPropertyName :
    IdentifierName
    StringLiteral
    NumericLiteral

ComputedPropertyName :
    [ AssignmentExpression ]
Run Code Online (Sandbox Code Playgroud)

(不知道你在这里期待什么样的答案)

如果您认为方法等同于为属性分配函数,那么将属性名称的相同规则应用于函数/方法名称似乎是有意义的.