Javascript 为什么obj={x,y}在Chrome中工作?

Javascript 为什么obj={x,y}在Chrome中工作?,javascript,ecmascript-6,Javascript,Ecmascript 6,显然这是我的打字错误,{x,y}应该是{x:x,y:y}。但是它实现了我想要的,在Chrome中,fieldx获取局部变量的值x 但为什么它能工作呢?ES2015增强了对象文字符号。支持这一点(部分) 有很好的解释。它是ECMAScript 2015(或ECMAScript 6)的一部分。只需指定标识符,就可以在对象文字中的对象中创建新属性 引用 对于ECMAScript 6,可以使用更短的符号来实现相同的功能: var obj = { type: 'data', x, y, data: []}

显然这是我的打字错误,
{x,y}
应该是{x:x,y:y}。但是它实现了我想要的,在Chrome中,field
x
获取局部变量的值
x


但为什么它能工作呢?

ES2015增强了对象文字符号。支持这一点(部分)


有很好的解释。

它是ECMAScript 2015(或ECMAScript 6)的一部分。只需指定标识符,就可以在对象文字中的对象中创建新属性

引用

对于ECMAScript 6,可以使用更短的符号来实现相同的功能:

var obj = { type: 'data', x, y, data: []}

ECMAScript 6规范中的相应部分是

AssignmentProperty:IdentifierReference初始值设定项Opt

  • 设P为IdentifierReference的StringValue
  • 设lref为ResolveBinding(P)
  • 返回时间(P)
  • 设v为GetV(value,P)
  • 返回(v)
  • 如果存在初始值设定项,且v未定义,则
  • 让defaultValue作为对初始值设定项求值的结果
  • 设v为GetValue(defaultValue)
  • 返回(v)
  • 如果IsAnonymousFunctionDefinition(初始值设定项)为true,则
  • 让hasNameProperty成为HasOwnProperty(v,“name”)
  • ReturnIfAbrupt(hasNameProperty)
  • 如果hasNameProperty为false,则执行SetFunctionName(v,P)
  • 返回值(lref,v)
  • 基本上,规范说,如果您只使用一个标识符,将创建一个带有标识符名称的新属性,并且该值将是该标识符的实际值。它甚至可以是函数的名称

    var a = "foo", 
        b = 42, 
        c = {};
    
    // Shorthand property names (ES6)
    var o = { a, b, c };
    

    版本43.0.2357.81构建在Ubuntu 14.04上,运行在LinuxMint 17.1(64位)上
    var a = "foo", b = 42, c = {}, d = function () {};    
    console.log({a, b, c, d});
    // { a: 'foo', b: 42, c: {}, d: [Function] }