
相对索引 `at` 方法
在 Array.prototype.at
、各种类数组和 String.prototype.at
上的新方法 at
使得访问一个靠近集合末端的元素变得更加简单和简洁。
从一个集合的末端访问第 N 个元素是一个常见的操作。然而,通常的方法是很冗长的,比如 my_array[my_array.length - N]
,或者性能不是很好,比如 my_array.slice(-N)[0]
。新的 at
方法使这个操作更符合人机工程学原理,它把负数参数解释为“从尾到头”。之前的例子可以表示为 my_array.at(-N)
。
为了统一起见,也支持正参数,并且等同于普通的属性访问。
这个新方法足够小,它的完整语义可以通过下面这个符合要求的 polyfill 实现来理解:
function at(n) {
// 把 n 转换为整数
n = Math.trunc(n) || 0;
// 允许从尾部开始索引的负数
if (n < 0) n += this.length;
// 超出索引范围时返回 undefined
if (n < 0 || n >= this.length) return undefined;
// 最后,使用一般的索引属性访问
return this[n];
}
关于字符串对象的一句话
由于 at
最终执行的是普通的索引,在字符串值上调用 at
会返回代码单位,就像普通索引一样。就像在字符串上的普通索引一样,代码单位可能不是你想要的 Unicode 字符串!请考虑是否更适合你的使用情况。请考虑 String.prototype.codePointAt()
是否更适合于你的使用情况。
支持 at
方法
方法 at
的环境支持情况:
- Chrome 92+
- Firefox 90+
- Safari 不支持
- Node.js 不支持
- Babel(通过
core-js
支持)
本文作者 Shu-yu Guo,转载请注明来源链接: