为什么 `Object.keys/values/entries` 返回的是数组而 `Array...` 返回的是迭代器?

3
在ES6/ES2018+中,
  • Object.keys()Object.values()Object.entries()似乎返回具体的数组类型。
  • Array.keys()Array.values()Array.entries()似乎返回迭代器。
这些API之间差异的原因是什么?

可能是为了与 Object.prototype 上的那些 API 版本保持一致。 - Pointy
1
我很难想到两者返回相同结果的任何原因。特别是如果Array.values()返回一个数组,那么...它将与输入数组相同,所以Array.values(arr)arr.slice()相同。另外两个将与Object.keysObject.entries相同,这已经存在了,因此具有相同功能将是多余的。 - VLAZ
1
我还怀疑Object.valuesObject.entries不会给你一个迭代器,因为Object.keys在ES5中已经存在并返回一个数组。因此,这两个方法是对该方法的补充,并与之一致,而Array.keys则是全新的,可以使用更新的功能,而且不需要重复现有的功能。 - VLAZ
1个回答

3

这只是时间问题。Object.keys是在ES5中引入的,而可迭代对象是在ES6中引入的。然而,对于所有这些内容来说,迭代器确实更为合理。因此,Object.valuesObject.entries很可能会遵循Object.keys以保持一致性,而数组方法则使用新的迭代器接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接