JavaScript at() 方法
接收一个整数值并返回该索引对应的元素:
const array1 = [5, 12, 8, 130, 44]; let index1 = 2; strt1 = `索引号为 ${index1} 的值为 ${array1.at(index1)}`; document.getElementById("demo1").innerHTML = strt1; let index2 = -2; strt2 = `索引号为 ${index2} 的值为 ${array1.at(index2)}`; document.getElementById("demo2").innerHTML = strt2;
定义和用法
at() 方法用于接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数。
匹配给定索引的数组中的元素。如果找不到指定的索引,则返回 undefined。
在传递非负数时,at() 方法等价于括号表示法。例如,array[0] 和 array.at(0) 均返回第一个元素。但是,当你需要从数组的末端开始倒数时,则不能使用 Python 和 R 语言中支持的 array[-1],因为方括号内的所有值都会被视为字符串属性,因此你最终读取的是 array["-1"],这只是一个普通的字符串属性而不是数组索引。
通常的做法是访问 length 并将其减去从末端开始的相对索引。例如,array[array.length - 1]。at() 方法允许使用相对索引,因此上面的示例可以简化为 array.at(-1)。更正式地,当 index < 0 时,该方法将访问索引 index + array.length。
at() 方法是通用的。其仅期望 this 具有 length 属性和以整数为键的属性。
浏览器支持
表格中的数字表示支持该方法的第一个浏览器版本号。
方法 | |||||
---|---|---|---|---|---|
at() | 45.0 | 12.0 | 32.0 | 9 | 25.0 |
语法
at(index)
参数
参数 | 描述 |
index | 要返回的数组元素的索引(位置)。当传递负数时,支持从数组末端开始的相对索引;也就是说,如果使用负数,返回的元素将从数组的末端开始倒数。 |
技术细节
返回值: | 元素。 |
JavaScript 版本: | ECMAScript 6 |
更多实例
返回数组的最后一个值:下面的示例提供了一个函数,它返回在一个指定的数组中找到的最后一个元素。
// 数组及数组元素
const cart = ['apple', 'banana', 'pear'];
// 一个函数,用于返回给定数组的最后一个元素
function returnLast(arr) {
return arr.at(-1);
}
// 获取 'cart' 数组的最后一个元素
const item1 = returnLast(cart);
console.log(item1); // 输出:'pear'
// 在 'cart' 数组中添加一个元素
cart.push('orange');
const item2 = returnLast(cart);
console.log(item2); // 输出:'orange'
比较不同的数组方法:以下示例比较了选择 Array 中倒数第二个元素的不同方法。虽然下面显示的所有方法都是可行的,但这个示例凸显了 at() 方法的简洁性和可读性。
// 数组及数组元素
const colors = ['red', 'green', 'blue'];
// 使用长度属性
const lengthWay = colors[colors.length-2];
console.log(lengthWay); // 输出:'green'
// 使用 slice() 方法。注意会返回一个数组
const sliceWay = colors.slice(-2, -1);
console.log(sliceWay[0]); // 输出:'green'
// 使用 at() 方法
const atWay = colors.at(-2);
console.log(atWay); // 输出:'green'
在非数组对象上调用 at():at() 方法读取 this 的 length 属性并计算需要访问的索引。
const arrayLike = {
length: 2,
0: "a",
1: "b",
};
console.log(Array.prototype.at.call(arrayLike, -1)); // "b"
版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com