为什么 JavaScript 集/映射使用“大小”而不是“长度”
Why do JavaScript Sets/Maps use `size` instead of `length`?
在查看JavaScript的新更改时,我注意到Set
和Map
使用.size
而不是像数组那样使用.length
。
这似乎是对数组正常情况的毫无意义的转移 - 只是要记住的另一件事。
这有很好的设计理由吗?
在es討論主題"Set length property"中有很多討論。这是一个激烈争论的问题,所以你不一定同意该决议也就不足为奇了。
在讨论中对此进行了大量的争论。最终,占上风的论点(正如ES2015的集合有size
而不是length
的事实所证明的那样)在David Bruant的一篇文章中进行了总结:
。对我来说,"长度"是指用尺子之类的东西进行测量。你从 0 开始,看看它的发展方向。这对于一个索引集的数组(从 0 开始并增长)和 C(连续字节序列)中考虑的数组来说非常准确,ECMAScript 数组似乎受到启发。这可能与无序集合不太相关,例如我倾向于认为是凌乱的袋子的集合。
并在Dean Landolt的一篇文章中进一步讨论:
只是想跳进去说不可写
length
也与字符串行为一致,但 David 对暗示度量拓扑length
提出了一个很好的观点。大卫对count
的建议很好。我们正在谈论的ISTM是cardinality
,但没有必要太愚蠢的精度。虽然size
对我来说很好,并且有很多现有技术。
虽然 apsillers 的 2016 年 1 月 27 日的答案添加了很好的链接,但缺少代码示例。集合的size
是只读的getter,而允许修改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"
相关文章:
- 为什么XMLHttpRequest响应的长度和请求文件的大小不同
- 如何按文本长度自动更改字体大小
- 图像大小与其base64字符串转换长度之间的比率是多少
- XMLHttpRequest内容长度不等于文件的实际大小
- 如何使字体大小适应字符长度
- 如何将固定宽度和“自定义调整大小”长度设置为 Spring
- Textarea,根据内容和长度自动调整自己的字体大小
- JavaScript:下载的文件大小与内容长度不同
- 为什么 JavaScript 集/映射使用“大小”而不是“长度”
- 如何获得不同字符串长度的正确大小的标签
- 使用JavaScript[]文字的数组的长度是否真正反映了其在内存中的物理大小
- 修剪不同大小的阵列(但总是超过20),使其达到特定长度(10)
- 根据文本长度动态更改字体大小
- 如何根据文本的长度更改输入类型文本中的文本大小
- 什么是字节固定大小长度
- 无效的字符串长度/分配大小重载JavaScript
- 根据长度和容器大小动态调整文本大小
- 编写一个函数,将数组(第一个参数)拆分为大小(第二个参数)的长度组,并将它们作为多维数组返回
- 内容长度与写入大小不匹配
- 根据页面加载的文本长度调整输入大小