JavaScript Array.at: элемент с конца массива

Категория: JavaScript · Язык: JavaScript · Обновлено:

Array.prototype.at() возвращает элемент по индексу и поддерживает отрицательные значения: at(-1) — последний элемент, at(-2) — предпоследний. Метод появился в ES2022 и работает также для строк и типизированных массивов. В отличие от arr[-1], он не создаёт свойство с именем "-1".

Взять элементы с конца

JavaScript
const items = ["a", "b", "c"];

console.log(items.at(0));   // a
console.log(items.at(-1));  // c
console.log(items.at(-2));  // b
console.log(items.at(10));  // undefined

Выход за границы не выбрасывает исключение, а возвращает undefined. Это удобно для проверки «есть ли элемент», но может скрыть ошибку индексации. Если отсутствие значения недопустимо, проверяйте длину или используйте ?? с явным значением по умолчанию.

Применить к строке

JavaScript
const text = "привет";
console.log(text.at(-1)); // т

Строки в JavaScript неизменяемы, поэтому at() только читает символ. Для получения нескольких символов с конца используйте slice(-3). Для кодовых точек Unicode at() возвращает половину суррогатной пары, как и обычный индекс; для графем нужен Intl.Segmenter.

arr[-1] не работает как индекс: JavaScript воспринимает -1 как строковый ключ, и вы получите undefined, даже если в массиве есть элементы. Старый способ arr[arr.length - 1] остаётся рабочим, но at(-1) короче и лучше читается. Для пустого массива оба варианта дадут undefined.

Метод поддерживается в Chrome 92+, Firefox 90+, Safari 15.4+ и Node.js 16.6+. Дробный индекс усекается к целому, а NaN считается нулём. В старых окружениях нужен полифил или обычная индексация.

Документация: Array.prototype.at, String.prototype.at.