Iterator.range S2
提案概览
- 阶段: Stage 2
- 状态: 进行中
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
提案速览
该提案为 JavaScript 引入 Iterator.range,提供生成算术序列的内置方式,支持递增、递减、步长、小数步长、BigInt 以及无限序列。其目标是用原生实现取代众多第三方实现,提升开发者生产力与性能。
Note
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
Iterator.range
提案发起人:Jack Works
作者:Jack Works
阶段:2
本提案描述向 JavaScript 添加 Iterator.range。
查看渲染后的规范,参见此处。
与其他语言比较(进行中)
Polyfill
-
core-js 库中提供了 polyfill。你可以在 ECMAScript proposals 部分找到它。
-
在提案仓库中,有一个提案的逐步实现
可用,因此你可以使用调试器验证规范中是否存在 bug。
动机
- 因为我们还没有它™
没有这些函数,语言会显得不完整,并且让本可以非常精致的体验受到小阻碍。将其引入平台将提升 Web 性能,并提高开发者的生产力,因为他们不再需要实现这些通用函数。
—— String.prototype.{padStart,padEnd}
range 是一个非常实用的函数。例如在 Python 中:
在一个 StackOverflow 问题中有至少 20 种不同的实现。
提供 range 的库数量众多:math.js、lodash、underscore.js、ramda、d3、range、fill-range、multi-integer-range、……
目标
- 算术序列
-
- 递增(0, 1, 2, 3, ...)
-
- 递减(0, -1, -2, -3, ...)
-
- 步长(0, 2, 4, 6, ...)
-
-
- 小数步长(0, 0.2, 0.4, ...)
-
- 支持 BigInt
-
- 与算术序列相同
- 无限序列
Iterator.range(0, Infinity)-> (0, 1, 2, 3, ...)
非目标
- 新语法
- 字符串序列(a, b, c, d, ...)
- 魔术
-
- 例如
if (x in Iterator.range(0, 10))(Kotlin 具有此功能)
- 例如
示例
参见测试了解更多用法。
演示
签名
参见 global.d.ts