exe*_*ook 8 javascript ecmascript-6
var obj = { type: 'data', x, y, data: []}
Run Code Online (Sandbox Code Playgroud)
显然这是我的错字,{x,y}应该是{x:x,y:y}.但它确实符合我的要求,在Chrome中,字段x获取局部变量的值x.
但为什么它有效呢?
the*_*eye 11
它是ECMAScript 2015(或ECMAScript 6)的一部分.只需指定标识符,就可以在对象文字中的对象中创建新属性.
使用ECMAScript 6,可以使用更短的符号来实现相同的目标:
Run Code Online (Sandbox Code Playgroud)var a = "foo", b = 42, c = {}; // Shorthand property names (ES6) var o = { a, b, c };
ECMAScript 6规范中的相应部分在这里,
AssignmentProperty:IdentifierReference Initializer opt
- 设P为IdentifierReference的 StringValue .
- 让lref为ResolveBinding(P).
- ReturnIfAbrupt(P).
- 设v为GetV(值,P).
- ReturnIfAbrupt(v).
- 如果初始化器选择存在,并且v是不确定的,那么
- 让defaultValue成为评估Initializer的结果.
- 设v为GetValue(defaultValue).
- ReturnIfAbrupt(v).
- 如果IsAnonymousFunctionDefinition(Initializer)为true,那么
- 让hasNameProperty为HasOwnProperty(v,"name").
- ReturnIfAbrupt(hasNameProperty).
- 如果hasNameProperty为false,则执行SetFunctionName(v,P).
- 返回PutValue(lref,v).
基本上,规范说,如果您只使用标识符,将创建一个具有标识符名称的新属性,该值将是该标识符的实际值.它甚至可以是函数的名称.
var a = "foo", b = 42, c = {}, d = function () {};
console.log({a, b, c, d});
// { a: 'foo', b: 42, c: {}, d: [Function] }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |