Getting last element of Array ?
中文标题:获取数组的最后一个元素
提案概览
- 阶段: 未分阶段
- 状态: 已撤回
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
提案速览
该提案解决了通过 array\[array.length - 1\] 获取数组最后一个元素这一常见但容易出错的模式。它提议在 Array.prototype 上添加两个新属性:作为 getter/setter 的 lastItem 和作为 getter 的 lastIndex,并采用通用算法,也适用于类数组对象。
Note
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
从数组中获取最后一项
该提案的推动者(@keithamus)目前不计划推进到 Stage 2。其他提案(Array.prototype.item 和 Array Slice Notation)也充分解决了这个问题,并且在标准轨道上推进得更快。如果其中一个提案推进到 Stage 3,本提案将被放弃。
理由
目前获取数组最后一个元素的唯一方法是从 .length 属性减去 1,并使用该值进行属性查找。通常写法为 someArray[someArray.length - 1]。
对于如此常见的操作,很容易忘记从 length 属性中减去 -1,或者过度使用,因此应该有更简单的语法来做这件事。
高层提案
Array.prototype.lastItem 是一个具有 getter/setter 函数的属性,返回数组的最后一项。 Array.prototype.lastIndex 是一个具有 getter 函数的属性,返回数组的最后一个索引。
规范
Polyfill
Polyfill 可在 core-js 库中找到。你可以在 ECMAScript 提案部分 找到它。
这是一个使用抽象 ECMAScript 操作的 polyfill:
其他考虑过的选项
Array.prototype.last/Array.prototype.last()最初被提议,但存在 Web 兼容性问题。Array.prototype.end()作为方法。缺点仍然是用笨拙的语法设置数组的最后一个元素。Array.prototype.end作为 getter。然而lastItem是更受欢迎的名称选择。Array.prototype.peek()被考虑过(与push、pop配合良好),但peek作为 setter 不直观。Array.prototype.prePop()被提到,但存在与peek相同的问题——对于设置不直观,而且如果它不改变原数组,可能令人惊讶。- 一堆其他名称。最重要的是,请参见以下命名标准的理由:
- 没有 Web 兼容性问题
- 属于最常见的 1000 个英语单词(last 和 end 都是)
- 对于获取和设置都应该直观
- 理想情况下不是复合词(比如 lastItem)