为什么我不能在Set或Map上使用Object.keys()?

时间:2015-11-20 20:29:49

标签: javascript dictionary set ecmascript-6

我尝试使用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: []

当我使用Map时会发生同样的事情:

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: []

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

来自Map MDN reference

  

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

来自Set MDN reference

  

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