除了普通对象之外,数组也是JavaScript中广泛使用的数据结构。而对数组的一个广泛使用的操作是通过索引来访问元素。
在这篇文章中,我将介绍新的数组方法array.at(index)
。
这个新方法的主要好处是使用负数的索引从数组的末端访问元素,而使用普通的方括号语法是不可能的array[index]
。
1.方括号语法的局限性
通过索引访问数组元素的通常方法是使用方括号array[index]
。
const fruits = ['orange', 'apple', 'banana', 'grape'];
const item = fruits[1];
item; // => 'apple'
表达式array[index]
评估为位于index
的数组项,并被命名为属性访问器。你可能已经知道,JavaScript中数组的索引是从0
开始的。
在大多数情况下,方括号语法是通过正数索引访问项的好方法(>= 0
)。它的语法简单,可读性强。
但有时你想从末尾访问元素,而不是从开头。例如,让我们访问数组的最后一个元素。
const fruits = ['orange', 'apple', 'banana', 'grape'];
const lastItem = fruits[fruits.length - 1];
lastItem; // => 'grape'
fruits[fruits.length - 1]
是如何访问数组的最后一个元素的,其中 fruits.length - 1
是最后一个元素的索引。
困难的是,方括号访问器不允许以直接的方式从数组的末端访问项目,而且也不接受负的索引。
幸运的是,一个新的提议(从2021年1月起处于第三阶段)将该方法at()
到数组(以及类型化的数组和字符串),并解决了方括号访问器的许多限制。
2. array.at()方法
简单地说,array.at(index)
,访问index
参数处的元素。
如果index
参数是一个正整数>= 0
,该方法返回该索引处的项目:
const fruits = ['orange', 'apple', 'banana', 'grape'];
const item = fruits.at(1);
item; // => 'apple'
如果index
参数大于或等于数组的长度,那么,像普通的访问器一样,该方法返回undefined
:
const fruits = ['orange', 'apple', 'banana', 'grape'];
const item = fruits.at(999);
item; // => undefined
当你在array.at()
方法中使用一个负的索引时,真正神奇的事情发生了–那么这个元素就从数组的末端被访问。
例如,让我们使用索引-1
来访问数组的最后一个元素:
const fruits = ['orange', 'apple', 'banana', 'grape'];
const lastItem = fruits.at(-1);
lastItem; // => 'grape'
下面是一个更详细的例子,说明array.at()
方法如何访问元素。
const vegetables = ['potatoe', 'tomatoe', 'onion'];
vegetables.at(0); // => 'potatoe'
vegetables.at(1); // => 'tomatoe'
vegetables.at(2); // => 'onion'
vegetables.at(3); // => undefined
vegetables.at(-1); // => 'onion'
vegetables.at(-2); // => 'tomatoe'
vegetables.at(-3); // => 'potatoe'
vegetables.at(-4); // => undefined
如果negIndex
是一个负的索引< 0
,那么array.at(negIndex)
就会访问索引array.length + negIndex
的元素。这里有一个例子:
const fruits = ['orange', 'apple', 'banana', 'grape'];
const negIndex = -2;
fruits.at(negIndex); // => 'banana'
fruits[fruits.length + negIndex]; // => 'banana'
3.总结
JavaScript中的方括号语法是按索引访问项目的常用和好方法。只要把索引表达式放在方括号中array[index]
,就可以得到该索引处的数组项。
然而,使用常规访问器从尾部访问项目并不方便,因为它不接受负数的索引。所以,例如,要访问数组的最后一个元素,你必须使用一个变通的表达式。
const lastItem = array[array.length - 1];
幸运的是,新的数组方法array.at(index)
可以让你像普通访问器一样通过索引访问数组元素。此外,array.at(index)
接受负的索引,在这种情况下,该方法从尾部获取元素。
const lastItem = array.at(-1);
只要在你的应用程序中包含array.prototype.atpolyfill,今天就可以开始使用array.at()
!