Справочники
Методы JavaScript
Методы Array, String, Object, Map, Set, Promise и Math: что возвращают, меняют ли исходник, с какой версии есть. Каждый пример выполнен настоящим движком — результат рядом.
Меняют исходник 11 из 84 методов в справочнике. Для неизменяемых данных (React, Vue, Redux) у массивов есть парные методы: toSorted, toReversed, toSpliced, with.
Показано 84 из 84 методов.
Array: меняют исходный массив
Эти методы правят массив на месте. В React и Vue это ломает сравнение состояний — используйте версии to…() или копию [...arr].
const a = [1, 2]; const len = a.push(3); [len, a] // → [3, [1, 2, 3]]
push(...items) — Добавить в конец; возвращает новую длину, а не массив.
⚠ Меняет исходный объект.
const a = [1, 2, 3]; const last = a.pop(); [last, a] // → [3, [1, 2]]
pop() — Снять последний элемент и вернуть его.
⚠ Меняет исходный объект.
const a = [2, 3]; a.unshift(1); a // → [1, 2, 3]
unshift(...items) — Добавить в начало; возвращает новую длину.
⚠ Меняет исходный объект.
const a = [1, 2, 3]; const first = a.shift(); [first, a] // → [1, [2, 3]]
shift() — Снять первый элемент и вернуть его.
⚠ Меняет исходный объект.
const a = ["a", "b", "c", "d"]; const removed = a.splice(1, 2, "X"); [removed, a] // → [["b", "c"], ["a", "X", "d"]]
splice(start, deleteCount, ...items) — Удалить и/или вставить в середину; возвращает массив удалённых.
⚠ Меняет исходный объект.
[10, 9, 1].sort() // → [1, 10, 9]
sort(compareFn?) — Сортирует на месте и возвращает тот же массив. Без функции сравнивает как строки!
⚠ Меняет исходный объект.
[10, 9, 1].sort((a, b) => a - b) // → [1, 9, 10]
sort((a, b) => a - b) — Числовая сортировка по возрастанию.
⚠ Меняет исходный объект.
const a = [1, 2, 3]; a.reverse(); a // → [3, 2, 1]
reverse() — Разворачивает на месте.
⚠ Меняет исходный объект.
new Array(3).fill(0) // → [0, 0, 0]
fill(value, start?, end?) — Заполнить значением.
⚠ Меняет исходный объект.
[1, 2, 3, 4, 5].copyWithin(0, 3) // → [4, 5, 3, 4, 5]
copyWithin(target, start, end?) — Скопировать часть массива внутрь него же.
⚠ Меняет исходный объект.
Array: возвращают новый массив
const a = [3, 1, 2]; const b = a.toSorted(); [a, b] // → [[3, 1, 2], [1, 2, 3]]
toSorted(compareFn?) — Отсортированная копия, исходник не трогается.
Исходник не меняется. Появился в ES2023.
[1, 2, 3].toReversed() // → [3, 2, 1]
toReversed() — Развёрнутая копия.
Исходник не меняется. Появился в ES2023.
["a", "b", "c"].toSpliced(1, 1) // → ["a", "c"]
toSpliced(start, deleteCount, ...items) — Копия с удалением и вставкой.
Исходник не меняется. Появился в ES2023.
[1, 2, 3].with(-1, 9) // → [1, 2, 9]
with(index, value) — Копия с заменой одного элемента; индекс может быть отрицательным.
Исходник не меняется. Появился в ES2023.
[1, 2, 3].map((x) => x * 2) // → [2, 4, 6]
map(fn) — Новый массив из результатов функции.
Исходник не меняется.
[1, 2, 3, 4].filter((x) => x % 2 === 0) // → [2, 4]
filter(fn) — Только элементы, для которых функция вернула истину.
Исходник не меняется.
[1, 2, 3, 4].slice(1, -1) // → [2, 3]
slice(start?, end?) — Кусок массива; end не включается, отрицательные считаются с конца.
Исходник не меняется.
[1].concat([2, 3], 4) // → [1, 2, 3, 4]
concat(...arrays) — Склеить массивы.
Исходник не меняется.
[1, [2, [3, [4]]]].flat(2) // → [1, 2, 3, [4]]
flat(depth = 1) — Раскрыть вложенные массивы на заданную глубину.
Исходник не меняется. Появился в ES2019.
["a b", "c"].flatMap((s) => s.split(" ")) // → ["a", "b", "c"]
flatMap(fn) — map, затем flat на один уровень.
Исходник не меняется. Появился в ES2019.
Array.from({ length: 3 }, (_, i) => i * i) // → [0, 1, 4]
Array.from(iterable, mapFn?) — Массив из итерируемого или «похожего на массив».
Исходник не меняется.
Array.of(3) // → [3]
Array.of(...items) — Массив из аргументов; в отличие от Array(3) не создаёт дыры.
Исходник не меняется.
Array: поиск и проверки
[5, 12, 8].find((x) => x > 10) // → 12
find(fn) — Первый подходящий элемент или undefined.
Исходник не меняется.
[5, 12, 8].findIndex((x) => x > 10) // → 1
findIndex(fn) — Индекс первого подходящего или -1.
Исходник не меняется.
[5, 12, 8, 30].findLast((x) => x > 10) // → 30
findLast(fn) — Последний подходящий элемент.
Исходник не меняется. Появился в ES2023.
[5, 12, 8, 30].findLastIndex((x) => x < 10) // → 2
findLastIndex(fn) — Индекс последнего подходящего.
Исходник не меняется. Появился в ES2023.
[1, NaN].includes(NaN) // → true
includes(value) — Есть ли значение. Видит NaN, в отличие от indexOf.
Исходник не меняется. Появился в ES2016.
[1, NaN].indexOf(NaN) // → -1
indexOf(value) — Индекс по строгому равенству или -1. NaN не находит.
Исходник не меняется.
[].some(() => true) // → false
some(fn) — Подходит ли хотя бы один. На пустом массиве — false.
Исходник не меняется.
[].every(() => false) // → true
every(fn) — Подходят ли все. На пустом массиве — true.
Исходник не меняется.
[1, 2, 3].at(-1) // → 3
at(index) — Элемент по индексу, отрицательный — с конца.
Исходник не меняется. Появился в ES2022.
Array.isArray([]) // → true
Array.isArray(value) — Надёжная проверка на массив (typeof даёт "object").
Исходник не меняется.
Array: свёртка и обход
[1, 2, 3].reduce((sum, x) => sum + x, 0) // → 6
reduce(fn, initial) — Свернуть массив в одно значение. Без initial на пустом массиве — TypeError.
Исходник не меняется.
[1, 2].forEach((x) => x) // → undefined
forEach(fn) — Просто обойти; всегда возвращает undefined, прервать нельзя (для этого — for…of).
Исходник не меняется.
["a", "b", "c"].join(" / ") // → "a / b / c"
join(separator = ",") — Склеить в строку.
Исходник не меняется.
Array.from(["a", "b"].entries()) // → [[0, "a"], [1, "b"]]
entries() — Итератор пар [индекс, значение] для for…of.
Исходник не меняется.
Object.groupBy([1, 2, 3, 4], (x) => (x % 2 ? "odd" : "even")) // → { odd: [1, 3], even: [2, 4] }
Object.groupBy(items, fn) — Разложить по группам в объект.
Исходник не меняется. Появился в ES2024.
String
Строки неизменяемы: ни один метод не меняет исходную строку, все возвращают новую.
"Привет, мир".slice(-3) // → "мир"
slice(start, end?) — Подстрока; отрицательные индексы считаются с конца.
Исходник не меняется.
"Привет".substring(4, 1) // → "рив"
substring(start, end?) — Как slice, но отрицательные превращаются в 0, а аргументы меняются местами, если start > end.
Исходник не меняется.
"abc".at(-1) // → "c"
at(index) — Символ по индексу, отрицательный — с конца.
Исходник не меняется. Появился в ES2022.
"Привет".includes("иве") // → true
includes(sub) — Есть ли подстрока.
Исходник не меняется.
"file.tar.gz".endsWith(".gz") // → true
startsWith(sub) / endsWith(sub) — Начинается или заканчивается ли строка на подстроку.
Исходник не меняется.
"a,b,,c".split(",") // → ["a", "b", "", "c"]
split(separator, limit?) — Разбить в массив.
Исходник не меняется.
" текст \n".trim() // → "текст"
trim() / trimStart() / trimEnd() — Убрать пробельные символы по краям, включая переводы строк.
Исходник не меняется.
"7".padStart(3, "0") // → "007"
padStart(length, fill) — Дополнить слева до длины.
Исходник не меняется. Появился в ES2017.
"ab".padEnd(5, ".") // → "ab..."
padEnd(length, fill) — Дополнить справа.
Исходник не меняется. Появился в ES2017.
"ha".repeat(3) // → "hahaha"
repeat(count) — Повторить строку.
Исходник не меняется.
"a-b-c".replace("-", "+") // → "a+b-c"
replace(pattern, replacement) — Заменить. Со строкой-образцом меняет только первое вхождение!
Исходник не меняется.
"a-b-c".replaceAll("-", "+") // → "a+b+c"
replaceAll(pattern, replacement) — Заменить все вхождения; регулярка обязана быть с флагом g.
Исходник не меняется. Появился в ES2021.
"ёжик".toUpperCase() // → "ЁЖИК"
toUpperCase() / toLowerCase() — Регистр. Для турецкого и подобных языков — toLocaleUpperCase("tr").
Исходник не меняется.
["ёж", "яма", "еда"].sort((a, b) => a.localeCompare(b, "ru")) // → ["еда", "ёж", "яма"]
localeCompare(other, locale) — Сравнение по правилам языка — для сортировки.
Исходник не меняется.
"a1b22c333".match(/\d+/g) // → ["1", "22", "333"]
match(regexp) — Совпадение; с флагом g — массив всех совпадений без групп.
Исходник не меняется.
Array.from("k1=v1;k2=v2".matchAll(/(\w+)=(\w+)/g), (x) => x[1]) // → ["k1", "k2"]
matchAll(regexp) — Итератор всех совпадений с группами; регулярка обязана быть с флагом g.
Исходник не меняется. Появился в ES2020.
"😀".codePointAt(0) // → 128512
codePointAt(index) — Код символа, включая эмодзи из двух половинок.
Исходник не меняется.
"й".normalize("NFD").length // → 2
normalize("NFC") — Привести к одной форме Юникода: «й» из двух символов станет одним.
Исходник не меняется.
["😀".length, [..."😀"].length] // → [2, 1]
[...str].length — Длина в символах, а не в UTF-16 единицах: length эмодзи — 2.
Исходник не меняется.
Object и копирование
Object.entries({ a: 1, b: 2 }) // → [["a", 1], ["b", 2]]
Object.keys / values / entries — Свои перечисляемые ключи, значения и пары.
Исходник не меняется.
Object.fromEntries([["a", 1], ["b", 2]]) // → { a: 1, b: 2 }
Object.fromEntries(pairs) — Объект из пар — обратное к entries.
Исходник не меняется. Появился в ES2019.
const t = { a: 1 }; Object.assign(t, { b: 2 }); t // → { a: 1, b: 2 }
Object.assign(target, ...sources) — Скопировать свойства в target; меняет и возвращает target.
⚠ Меняет исходный объект.
const o = { n: { x: 1 } }; const c = { ...o }; c.n === o.n // → true
{ ...obj } — Поверхностная копия: вложенные объекты остаются общими.
Исходник не меняется.
const o = { n: { x: 1 } }; const c = structuredClone(o); c.n === o.n // → false
structuredClone(value) — Глубокая копия, понимает Date, Map, Set и циклические ссылки. Функции не копирует.
Исходник не меняется.
Object.hasOwn({ a: 1 }, "toString") // → false
Object.hasOwn(obj, key) — Своё ли свойство — замена obj.hasOwnProperty(key).
Исходник не меняется. Появился в ES2022.
const o = Object.freeze({ a: 1 }); Object.isFrozen(o) // → true
Object.freeze(obj) — Запретить изменения. Заморозка поверхностная.
Исходник не меняется.
[Object.is(NaN, NaN), Object.is(0, -0)] // → [true, false]
Object.is(a, b) — Сравнение, где NaN равен NaN, а +0 не равен -0.
Исходник не меняется.
JSON.stringify({ a: undefined, b: 1 }) // → "{\"b\":1}"
JSON.stringify(value, null, 2) — В JSON с отступами. undefined и функции в объектах пропадают, Date становится строкой.
Исходник не меняется.
JSON.parse("[1, 2]") // → [1, 2]
JSON.parse(text, reviver?) — Из JSON; reviver превращает значения по ходу.
Исходник не меняется.
Map и Set
const map = new Map([["a", 1]]); map.set("b", 2); [map.get("b"), map.size] // → [2, 2]
new Map([[k, v]]) — Словарь с ключами любого типа и сохранением порядка вставки.
Исходник не меняется.
[...new Set([1, 1, 2, 3, 3])] // → [1, 2, 3]
new Set(iterable) — Множество уникальных значений — быстрый дедуп.
Исходник не меняется.
new Set(["a"]).has("a") // → true
set.has(value) — Проверка принадлежности за O(1), в отличие от includes у массива.
Исходник не меняется.
[...new Set([1, 2]).union(new Set([2, 3]))] // → [1, 2, 3]
a.union(b) / intersection / difference — Операции над множествами.
Исходник не меняется. Появился в ES2025.
Promise и асинхронность
Результаты ниже — то, чем промис разрешается (как после await).
Promise.all([1, Promise.resolve(2)]) // → [1, 2]
Promise.all(promises) — Ждать все; падает на первой ошибке.
Исходник не меняется.
Promise.allSettled([Promise.reject(new Error("x"))]).then((r) => r[0].status) // → "rejected"
Promise.allSettled(promises) — Ждать все и получить статус каждого, без падения.
Исходник не меняется. Появился в ES2020.
Promise.race([new Promise((r) => setTimeout(r, 50, "медленно")), Promise.resolve("быстро")]) // → "быстро"
Promise.race(promises) — Первый завершившийся — успехом или ошибкой. Основа таймаутов.
Исходник не меняется.
Promise.any([Promise.reject(new Error("x")), Promise.resolve("ok")]) // → "ok"
Promise.any(promises) — Первый успешный; ошибка — только если упали все (AggregateError).
Исходник не меняется. Появился в ES2021.
const { promise, resolve } = Promise.withResolvers(); resolve(42); promise // → 42
Promise.withResolvers() — Промис вместе с resolve и reject снаружи — без обёртки new Promise.
Исходник не меняется. Появился в ES2024.
Promise.resolve(1).finally(() => 2) // → 1
promise.finally(fn) — Выполнить в любом случае; результат промиса не меняет.
Исходник не меняется. Появился в ES2018.
Числа и Math
[Number.isNaN("abc"), isNaN("abc")] // → [false, true]
Number.isNaN(value) — Проверка на NaN без приведения; глобальный isNaN("abc") даёт true.
Исходник не меняется.
Number.isInteger(5.0) // → true
Number.isInteger(value) — Целое ли число.
Исходник не меняется.
[Number.parseFloat("12.5px"), Number("12.5px")] // → [12.5, NaN]
Number.parseFloat(str) — Число из начала строки; Number("12px") — NaN, parseFloat — 12.
Исходник не меняется.
(1.005).toFixed(2) // → "1.00"
toFixed(digits) — Строка с фиксированным числом знаков — именно строка, не число.
Исходник не меняется.
[Math.round(-2.5), Math.trunc(-2.7), Math.floor(-2.1), Math.ceil(2.1)] // → [-2, -2, -3, 3]
Math.round / trunc / floor / ceil — round(-2.5) даёт -2: половина округляется вверх, к +∞.
Исходник не меняется.
Math.max(...[]) // → -Infinity
Math.max(...arr) — Максимум; от пустого массива — -Infinity.
Исходник не меняется.
[0.1 + 0.2 === 0.3, Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON] // → [false, true]
0.1 + 0.2 — Двоичная дробь: сравнивать с допуском Number.EPSILON или считать в копейках.
Исходник не меняется.
new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" }).format(1234.5) // → "$1,234.50"
Intl.NumberFormat — Числа и валюты по правилам языка.
Исходник не меняется.