【问题标题】:Why can't I use Object.keys() on Set or Map?为什么我不能在 Set 或 Map 上使用 Object.keys()?
【发布时间】:2015-11-20 20:29:49
【问题描述】:

我正在尝试使用 console.log 查看 Set 对象的属性(如 size)。但是,如果我尝试将键记录在 Set 中,则会得到一个空数组:

let mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(3);

let keys = Object.keys(mySet);
console.log(keys); 

// Output: []

当我使用地图时也会发生同样的事情:

let myMap = new Map();
myMap.set('1', 1);
myMap.set('2', 2);
myMap.set('3', 3);

let keys = Object.keys(myMap);
console.log(keys); 

// Output: []

【问题讨论】:

  • Set 有哪些自己的可枚举属性?

标签: javascript dictionary set ecmascript-6


【解决方案1】:

您为什么希望它们可以作为键使用? SetMap 规范从未承诺过。可以使用相应的 API 获得键/值。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map

【讨论】:

    【解决方案2】:

    {Map, Set}.prototype.keys() 有另一种行为,两者都返回一个新的迭代器对象,而不是一个带键的数组:

    来自Map MDN reference

    Map.prototype.keys() 返回一个新的 Iterator 对象,其中包含 Map 对象中每个元素的键(按插入顺序)。

    来自Set MDN reference

    Set.prototype.keys() 与 values() 函数的函数相同,并返回一个新的 Iterator 对象,该对象包含 Set 中每个元素的值 按插入顺序排列的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多