【发布时间】:2021-02-13 15:38:02
【问题描述】:
我明白在 ES2015+ 中,而不是写:
let myObject = { a: "a", b: "b", c: "c" };
我可以使用对象速记来编写以下内容:
let a = "a";
let b = "b";
let c = "c";
let myObject = { a, b, c };
console.log(myObject);
但这并不像我正在寻找的速记。
有没有一种方法可以在首先定义变量的情况下声明一个对象字面量,然后该对象字面量的属性将自动分配值,这些值是对象属性名称的字符串化版本? p>
即我写了类似的东西:
let myObject = { a, b, c };
它会自动解析为:
let myObject = { a: "a", b: "b", c: "c" };
或者那种更短的速记根本不可能?
这个问题的一些背景:
我的用例是同时接受用户的 值 和 名称-值对。后者足够简单。在前者的情况下,我不希望用户跳过添加一个 name and 然后一个相同的 value一个就够了。
【问题讨论】:
-
根本没有。 . .
-
这样的对象不会特别有用,因为它是从你已经拥有的值到相同值的映射(例如
obj["foo"] === "foo",但你已经拥有"foo")。您可以创建一个 Proxy,它只返回您要求的道具的名称,但它可能有助于提供一些关于您为什么需要它的上下文。 -
为什么不接受一个对象或一个数组,那么,在数组
["a", "b", "c"]的情况下,它是对对象{a: "a", b: "b", c: "c"}的简单转换,使用例如.reduce. -
您的问题的补充提到了用户提供的值。那么,您能否为将接收此类输入的函数添加样板代码,并指出该函数的输出需要是什么?我问,因为我看不出一个对象 literal 如何与用户输入有任何关系......根据定义,它是 not 文字。
-
称它为字面量或语法,大概您是在谈论用户输入,即某人创建一个对象来调用您提供的部分 API(例如,他们正在使用的库) .在这种情况下,您是否在记录他们如何这样做(他们不知道如何创建对象)方面询问这个问题?或者您是否建议您的函数实现一些使其成为可能的东西?或者他们是否通过例如您打算解析的字符串?
标签: javascript object ecmascript-6 object-literal shorthand