globalThis
Глобальный объект в любой среде выполнения. Он предоставляет доступ к глобальным свойствам и функциям независимо от контекста выполнения, будь то браузерное окно или среда Node.js.
Ранее в JavaScript использовались различные имена для обращения к глобальному объекту, такие как window в браузерах и global в Node.js.
Однако эти имена были специфичными для своих сред выполнения.
globalThis появился в стандарте ECMAScript 2020 для обеспечения единообразного способа доступа к глобальному объекту независимо от среды выполнения.
Теперь вы можете использовать globalThis вместо window или global, чтобы обращаться к глобальным свойствам и функциям в любом окружении JavaScript.
Например, если вы хотите получить доступ к глобальной переменной `x`, вы можете использовать следующий код:
console.log(globalThis.x);
Код выше будет работать как в браузере, так и в среде Node.js, поскольку globalThis автоматически адаптируется к текущей среде выполнения.
BigInt
В JavaScript тип данных BigInt представляет целые числа произвольной точности, которые могут быть значительно больше, чем максимальное значение, которое может быть представлено с помощью обычного числового типа Number
Чтобы создать значение типа BigInt, вы можете добавить суффикс `n` к числу или использовать конструктор BigInt(). Вот примеры:
const a = 1234567890123456789012345678901234567890n; // с использованием суффикса "n" const b = BigInt("9876543210987654321098765432109876543210"); // с использованием конструктора
Операции с BigInt выполняются с использованием специальных функций, которые начинаются с префикса BigInt. Например, вы можете использовать BigInt.add() для сложения двух чисел типа BigInt:
const a = 10n; const b = 20n; const sum = BigInt.add(a, b); console.log(sum); // выводит 30n
Однако вы не можете использовать обычные арифметические операторы (`+`, `-`, `*`, `/`) для выполнения операций над числами типа BigInt.
Вместо этого используйте соответствующие функции, такие как
BigInt.add(),
BigInt.subtract(),
BigInt.multiply(),
BigInt.divide().
BigInt также поддерживает операторы сравнения
(`<`, `>`, `<=`, `>=`, `===`, `!==`), а также операторы инкремента (`++`) и декремента (`--`).
const a = 10n; const b = 20n; console.log(a < b); // выводит true console.log(a === b); // выводит false console.log(++a); // выводит 11n console.log(--b); // выводит 19n
Важно отметить, что операции между BigInt и Number или BigInt и String требуют явного преобразования типов.
Например:
const a = 10n; const b = 5; console.log(a + BigInt(b)); // выводит 15n console.log(String(a) + String(b)); // выводит "105"
Тип данных BigInt был добавлен в JavaScript в стандарте ECMAScript 2020.
Обратите внимание, что не все браузеры и среды JavaScript полностью поддерживают данный тип.
Оператор нулевого объединения (nullish coalescing operator)
В JavaScript он обозначается двумя символами вопросительного знака ??.
Он используется для проверки значения на null или undefined и возвращения альтернативного значения, если проверяемое значение является null или undefined.
Синтаксис оператора нулевого объединения выглядит следующим образом:
const result = a ?? b;
В этом примере, если "a" является null или undefined, то result будет равно "b". В противном случае, если "a" имеет какое-либо другое значение, то result будет равно "a".
Оператор нулевого объединения осуществляет строгое сравнение с null и undefined, поэтому он возвращает альтернативное значение только при этих двух условиях.
Если a равно 0, пустой строке (""), false или NaN, оператор нулевого объединения не будет считать их null или undefined и вернет "a" без изменений. Вот несколько примеров, демонстрирующих использование оператора нулевого объединения:
const name = null; const defaultName = "John"; const result = name ?? defaultName; console.log(result); // Выводит "John" const count = 0; const defaultCount = 10; const totalCount = count ?? defaultCount; console.log(totalCount); // Выводит 0 const foo = undefined; const bar = "Hello"; const baz = foo ?? bar; console.log(baz); // Выводит "Hello"
В примерах выше, если переменная name равна null, используется значение defaultName.
Если count равна 0, используется значение defaultCount.
Если foo равна undefined, используется значение bar.
Оператор нулевого объединения удобен для предоставления значений по умолчанию в случае отсутствия или недопустимости других значений.
Promise.any()
Это метод, представленный в JavaScript в стандарте ECMAScript 2021, который принимает массив промисов и возвращает новый промис, который выполняется, как только выполнится хотя бы один промис из переданного массива.
Если все промисы из массива отклонены (rejected), то возвращается отклоненный промис со всеми отклоненными значениями.
Синтаксис метода Promise.any() выглядит следующим образом:
Promise.any(iterable);
Где iterable - это итерируемый объект, такой как массив, содержащий промисы.
Вот пример, демонстрирующий использование Promise.any():
const promises = [ fetch('https://api.example.com/data1'), fetch('https://api.example.com/data2'), fetch('https://api.example.com/data3') ]; Promise.any(promises) .then(result => { console.log('At least one promise fulfilled:', result); }) .catch(error => { console.log('All promises rejected:', error); });
В этом примере массив promises содержит три асинхронных запроса к различным ресурсам.
Метод Promise.any() будет выполняться до тех пор, пока хотя бы один из промисов не будет выполнен успешно.
Как только это произойдет, будет вызван обработчик "then" с результатом выполненного промиса.
Если все промисы в массиве отклонены (rejected), то метод Promise.any() вызовет обработчик catch и передаст массив со всеми отклоненными значениями в качестве аргумента ошибки.
Важно отметить, что Promise.any() отличается от методов Promise.all() и Promise.race().
Promise.all() ожидает выполнения всех промисов, а Promise.race() возвращает результат первого выполненного или отклоненного промиса. Promise.any() же возвращает результат первого успешно выполненного промиса из массива.