gpt4 book ai didi

javascript - 为什么 obj={x,y} 在 Chrome 中有效?

转载 作者:数据小太阳 更新时间:2023-10-29 04:04:16 24 4
gpt4 key购买 nike

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

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

但为什么它有效?

最佳答案

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

引用 MDN's Object Initializer's Property Definitions section ,

With ECMAScript 6, there is a shorter notation available to achieve the same:

var a = "foo", 
b = 42,
c = {};

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

ECMAScript 6 规范中对应的部分是 here ,

AssignmentProperty : IdentifierReference Initializeropt

  1. Let P be StringValue of IdentifierReference.
  2. Let lref be ResolveBinding(P).
  3. ReturnIfAbrupt(P).
  4. Let v be GetV(value, P).
  5. ReturnIfAbrupt(v).
  6. If Initializeropt is present and v is undefined, then
    1. Let defaultValue be the result of evaluating Initializer.
    2. Let v be GetValue(defaultValue).
    3. ReturnIfAbrupt(v).
    4. If IsAnonymousFunctionDefinition(Initializer) is true, then
      1. Let hasNameProperty be HasOwnProperty(v, "name").
      2. ReturnIfAbrupt(hasNameProperty).
      3. If hasNameProperty is false, perform SetFunctionName(v, P).
  7. Return PutValue(lref,v).

基本上,规范说,如果您只使用一个标识符,将创建一个具有标识符名称的新属性,并且该值将是该标识符的实际值。它甚至可以是函数的名称。

var a = "foo", b = 42, c = {}, d = function () {};    
console.log({a, b, c, d});
// { a: 'foo', b: 42, c: {}, d: [Function] }

关于javascript - 为什么 obj={x,y} 在 Chrome 中有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30876142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com