在 esdiscuss 论坛主题 "Set length property" 中有很多关于此的讨论。由于这是一个备受争议的问题,你不一定会同意这个解决方案。
在 esdiscuss 中对此进行了大量的争论。最终胜出的观点(正如 ES2015 的 Set 具有 size
而不是 length
所证明的那样)总结在 David Bruant 的帖子中:
……对我来说,“length” 是像尺子一样测量长度的东西。您从0开始并查看到它的末尾。对于一个索引集(从0开始增长)和 ECMAScript 数组所受启发的 C 中考虑的数组(连续的字节序列)非常准确。对于无序集合(例如 sets)而言,这可能不太相关,我倾向于将其视为混乱的袋子。
并在 Dean Landolt 的帖子中进一步讨论:
我只是想插一句话,说非可写的
length
也符合 String 的行为,但 David 提出了一个很好的观点,即length
暗示着度量拓扑。David 建议使用count
很好。ISTM 我们正在谈论的是基数,但没有必要过于精确。虽然size
对我来说挺好的,并且有足够的先例。
size
是只读的,而数组允许修改length
以截断数组。
let arr = [1, 2, 3, 4]
arr.length = 2
console.log("modified length array", arr) // [1, 2]
let mySet = new Set([1, 2, 3, 4])
mySet.length = 2
mySet.size = 2
console.log("modified length set", [...mySet]) // [1, 2, 3, 4]
let str = "1234"
str.length = 2
console.log("modified length string", str) // "1234"
length
以外的其他名称是否不好? - Anders Marzi Tornblad