JavaScript是否有Map字面符号?

Mat*_*att 38 javascript ecmascript-6

从ES6开始,JavaScript有一个合适的Map对象.我没有看到使用文字符号的方法,就像使用数组或对象一样.我错过了,还是不存在?

阵: var arr = ["Foo", "Bar"];

宾语: var obj = { foo: "Foo", bar: "Bar" };

地图:???

Ber*_*rgi 40

不,ES6没有Maps或Sets 的文字符号.

您将不得不使用它们的构造函数,传递一个iterable(通常是一个数组文字):

var map = new Map([["foo", "Foo"], ["bar", "Bar"], …]);

var set = new Set(["Foo", "Bar", …]);
Run Code Online (Sandbox Code Playgroud)

有一些提议要为语言添加新的文字语法,但没有一个提到ES6(我个人不相信他们会在未来的任何版本中使用它).

  • 工作得很好!但是,对于像我这样粗心的读者:请务必将所有键值数组封装到一个数组中。我跳过了那组额外的括号,得到了一个令人讨厌的 TypeError。 (2认同)

Ste*_*her 6

它就像一个HashMap - 没有文字版本.你必须像构造函数一样定义它.

您可以阅读本主题,其中讨论了地图文字,以及为什么要添加它们.这基本上是其他关于Map文字的潜在提案.我个人不能预见ES7中的字面语法,因为地图很容易使用 - 但在将来的提案中可能会应用语法糖.

使用octothorp(散列)来讨论可能的文字符号的示例,如下所示:

const myMap = Map#{expression("derp"): value("herp")};
Run Code Online (Sandbox Code Playgroud)


Ale*_*arc 5

有一种方法可以做到这一点,就像我们使用文字一样

const fruits = new Map(Object.entries({apples: 1, bananas: 2}))

  • 大多数有 Map 可用的地方,可能都有可用的 Object.entries。这里最大的警告是它只初始化一个所有键都是字符串的映射。它可以像 `new Map([[12, 10], ...Object.entries({apples: 1, Bananas: 2})])` 一样使用一些字符串键和另一种类型的键来初始化一个集合, 尽管。 (2认同)
  • 此外,使用对象的行为使得`Map` 的插入顺序保证的值没有实际意义。此时,只需使用一个对象。 (2认同)