Array.prototype.at()
====================

Baseline 2022
-------------

Newly availableSince March 2022, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

* Learn more
* See full compatibility
* Report feedback
Метод **`at()`** принимает значение в виде целого числа и возвращает элемент массива с данным индексом. В качестве аргумента метод принимает положительные и отрицательные числа. При отрицательном значении отсчёт происходит с конца массива.

Интерактивный пример
--------------------

Синтаксис
---------


```js
at(index)
```

### Параметры

`index`

Индекс (позиция) элемента возвращаемого элемента массива. При передаче отрицательного индекса применяется относительная индексация с конца массива; например, при использовании отрицательного числа, возвращаемый элемент находится путём обратного отсчёта с конца массива.

### Возвращаемое значение

Элемент массива, соответствующий переданному индексу. Если переданный индекс не может быть найден, возвращает `undefined`.

Описание
--------

Метод `at()` является эквивиалентом получения элементов массива с помощью квадратных скобок с использованием неотрицательного индекса. Например, `array[0]` и `array.at(0)` оба вернут первый элемент. Однако, при вычислении значения с конца массива, нельзя использовать `array[-1]` как в Python или R, потому что все значения внутри квадратных скобок трактуются буквально как строковые свойства. Из-за этого попытка обращения к -1 элементу будет прочитана как `array["-1"]`, что является нормальным строковым значением, а не индексом массива.

Обычной практикой является получении числа элементов массива `length` и последующее вычисление значения индекса — например, `array[array.length - 1]`. Метод `at()` разрешает относительную индексацию, поэтому может быть сокращено до `array.at(-1)`.

Метод `at()` — это generic. Он ожидает только, что значение `this` будет иметь свойство `length` и свойства с числовыми ключом.

Примеры
-------

### Возврат последнего элемента массива

В следующем примере представлена функция, которая возвращает последний элемент переданного массива


```js
// Массив со значениями
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'
```

### Сравнение методов

В этом примере сравниваются разные способы выбора предпоследнего элемента `массива`. Хотя все приведённые ниже способы являются допустимыми, наиболее кратким и наглядным является использование метода `at()`.


```js
// Наш массив с элементами
const colors = ["red", "green", "blue"];

// Использование свойства 'length'
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()` считывает свойство `length` для значения `this` и вычисляет индекс для обращения.


```js
const arrayLike = {
  length: 2,
  0: "a",
  1: "b",
};
console.log(Array.prototype.at.call(arrayLike, -1)); // "b"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-array.prototype.at |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Полифил `Array.prototype.at` в библиотеке `core-js`
* Полифил для метода at().
* `Array.prototype.find()` – возвращает значение на основании проверки.
* `Array.prototype.includes()` – проверяет наличие значения в массиве.
* `Array.prototype.indexOf()` – возвращает индекс переданного элемента.