For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/stage/4/proposal-object-values-entries.md.
  • 简体中文
  • Object.values/Object.entries S4

    提案概览
    提案速览

    该提案向 ECMAScript 添加了 Object.values 和 Object.entries,分别提供对象的自有可枚举值和键值对的数组。它解决了先前只能通过库获得的此类工具函数的常见需求,并与现有的 Object.keys 模式保持一致。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    Object.values / Object.entries

    ECMAScript 提案,Object.values/Object.entries 的规范和参考实现

    规范由 @ljharb 起草。

    该提案目前处于流程第 4 阶段,并将包含在 ES 2017 中。

    指定的 TC39 审阅者:@wycats @littledan @rwaldron

    引擎实现

    之前的讨论

    合理性

    获取对象自身的值是一个非常常见的用例——例如,当将对象用作哈希过滤器时。许多库都有“values”函数:lodash/underscore、jQuery、Backbone 等。

    从对象中获取键/值对(规范中称为“entries”)的数组,对于迭代或序列化也很有用。随着 Map 构造函数接受一个 entries 的可迭代对象,以及其关联的 entries 迭代器(WeakMap 的构造函数也接受可迭代的 entries),通过将 entries 数组传递给 new Map 来快速将普通对象转换为 Map 变得非常有吸引力。

    我们已经有 Object.keys 返回自有键数组的先例,并且在 Map/Set/Array 上有匹配的 keys/values/entries 迭代器三元组。因此,根据 es-discuss 上的讨论以及至少一次之前的 TC39 会议,本提案旨在向 ECMAScript 添加 Object.valuesObject.entries。与 Object.keys 一样,它们将返回数组。它们的顺序将与 Object.keys 的顺序完全一致,这样所有三个结果数组的索引将反映对象上相同的键、值或条目。

    规范

    您可以查看 markdown 格式的规范,或渲染为 HTML 的形式。 注意:已进行少量规范重构,以确保 Object.{keys,values,entries} 共享相同的键顺序。

    迭代器还是数组?

    在本提案的观点中,与 Object.keys 的一致性至关重要。然而,一个后续的迭代器提案很可能是 Reflect.ownValuesReflect.ownEntries,这将与 Reflect.ownKeys 一起完成三元组,提供包含字符串值和符号值属性的数组。但是,本提案专注于 Object.values/Object.entries,并且 ObjectReflect 形式的存在不应排除另一种形式的存在。此外,目前从 keys/values/entries 返回迭代器的先例仅适用于原型上的方法——而且,“Object 是特殊的”似乎被许多人接受。另外,数组本身已经是可迭代的。