相对索引 `at` 方法

相对索引 `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,转载请注明来源链接:

原文链接:https://v8.dev/features/at-method

本文链接:https://tie.pub/2021/11/at-method/