at 方法用于相对索引

发布日期 · 标签:ECMAScript

Array.prototype、各种 TypedArray 原型和 String.prototype 上的新 at 方法使访问集合末尾附近的元素变得更容易、更简洁。

从集合末尾访问第 N 个元素是一种常见的操作。但是,通常的做法很冗长,例如 my_array[my_array.length - N],或者可能性能不佳,例如 my_array.slice(-N)[0]。新的 at 方法通过将负索引解释为“从末尾开始”来使此操作更符合人体工程学。前面的示例可以表示为 my_array.at(-N)

为了统一性,也支持正索引,并且等效于普通属性访问。

这个新方法足够小,以至于它的完整语义可以通过下面的兼容 polyfill 实现来理解

function at(n) {
// Convert the argument to an integer
n = Math.trunc(n) || 0;
// Allow negative indexing from the end
if (n < 0) n += this.length;
// Out-of-bounds access returns undefined
if (n < 0 || n >= this.length) return undefined;
// Otherwise, this is just normal property access
return this[n];
}

关于字符串的一句话 #

由于 at 最终执行普通索引,因此在字符串值上调用 at 将返回代码单元,就像普通索引一样。与字符串上的普通索引一样,代码单元可能不是您想要的 Unicode 字符串!请考虑是否 String.prototype.codePointAt() 更适合您的用例。

at 方法支持 #

  • Chrome: 从版本 92 开始支持
  • Firefox: 从版本 90 开始支持
  • Safari: 不支持
  • Node.js: 不支持