为何ECMAScript 6中Set的键与值相等?
为什么Set的forEach()回调前两个参数始终相同?
嘿,这个问题问到点子上了!关于ES6里Set的forEach()方法前两个参数为啥总是一模一样,《Understanding ECMAScript 6》这本书里给出了很明确的设计考量:
Set并不存在键。制定ECMAScript 6标准的团队原本可以让Set版本的forEach()回调函数仅接收两个参数,但这会使其与另外两种集合的forEach()不一致。于是他们找到了一种既能保持回调函数格式一致又能接收三个参数的方法:将Set中的每个值同时视为键和值。因此,在forEach()中第一个和第二个参数始终相同……
给你举个实际运行的例子,一看就明白:
const fruitSet = new Set(['apple', 'banana', 'cherry']); fruitSet.forEach((value, key, currentSet) => { console.log(`value: ${value}, key: ${key}`); });
执行这段代码后,你会看到每一行的value和key都是完全相同的——比如value: apple, key: apple。本质上这是标准制定团队的一个权衡决策:为了让Set的forEach()和Map、数组的forEach()保持统一的回调参数结构(都是「值、键/索引、集合本身」),哪怕Set本身没有键的概念,也把值复用成了键的参数,这样开发者不用额外记忆不同集合的回调差异,降低了学习成本。
内容的提问来源于stack exchange,提问作者m_rd_n
相关产品推荐
相关产品推荐

