For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/year/pending/proposal-iterator.range.md.
  • 简体中文
  • Iterator.range S2

    提案概览
    提案速览

    该提案为 JavaScript 引入 Iterator.range,提供生成算术序列的内置方式,支持递增、递减、步长、小数步长、BigInt 以及无限序列。其目标是用原生实现取代众多第三方实现,提升开发者生产力与性能。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    Iterator.range

    提案发起人:Jack Works

    作者:Jack Works

    阶段:2

    本提案描述向 JavaScript 添加 Iterator.range

    查看渲染后的规范,参见此处

    与其他语言比较(进行中)

    游乐场

    Polyfill

    动机

    • 因为我们还没有它™

    没有这些函数,语言会显得不完整,并且让本可以非常精致的体验受到小阻碍。将其引入平台将提升 Web 性能,并提高开发者的生产力,因为他们不再需要实现这些通用函数。

    —— String.prototype.{padStart,padEnd}

    range 是一个非常实用的函数。例如在 Python 中:

    for i in range(5):
        # ...

    一个 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 具有此功能)

    示例

    参见测试了解更多用法。

    for (const i of Iterator.range(0n, 43n)) console.log(i) // 0n 到 42n
    
    Iterator.range(0, Infinity)
        .take(1000)
        .filter((x) => !(x % 3))
        .toArray()
    
    function* even() {
        for (const i of Iterator.range(0, Infinity)) if (i % 2 === 0) yield i
    }
    ;[...Iterator.range(1, 100, 2)] // 从 1 到 99 的奇数

    演示

    签名

    参见 global.d.ts