DanLevy.net

Тест: Знаетели вы современный JavaScript?

Продемонстрируйте своё мастерство JavaScript!

Знаете разницу между ES2015 и ES2022?

Каково значение result?

console.log(null ?? 100);

Оператор объединения с null (??) возвращает правый операнд (b), если левый операнд (a) равен null или undefined. В данном случае a равно null, поэтому result равно 100.

Какой будет вывод следующего кода?

const value = false;
const defaultVal = 42;
console.log(value ?? defaultVal);

Оператор нулевого слияния (??) рассматривает ложные значения, такие как false, как допустимые. Поскольку value равно false, оно считается допустимым значением и возвращается.

Какой будет вывод следующего кода?

const obj = { foo: null };
const result = obj.foo?.bar;
console.log(result);

Оператор опциональной цепочки (?.) прекращает вычисление, если левый операнд равен null или undefined. Поскольку obj.foo равно null, obj.foo?.bar оценивается как undefined.

Какой вывод у следующего кода?

const a = 42n;
const result = a * 2n;
console.log(result);

Значения BigInt создаются добавлением n к числу. Нельзя смешивать BigInt с обычными числами в арифметических операциях. Здесь оба значения являются BigInt, поэтому умножение работает, в результате получается 84n.

Что это выводит?

const modulePromise = import('./myModule.js');
console.log(typeof modulePromise);

Функция import() возвращает Promise, который разрешается в объект модуля. Поскольку экземпляры Promise являются объектами, typeof modulePromise выводит 'object'.

Каков будет результат следующего кода?

const promises = [
Promise.resolve('success'),
Promise.reject('error')
];
Promise.allSettled(promises).then(results => {
console.log(results[0].status + ': ' + results[0].value);
});

Promise.allSettled возвращает массив объектов, описывающих результат каждого промиса. Первый промис fulfilled со значением 'success', поэтому оператор вывода напечатает fulfilled: success.

Что возвращает str.matchAll()?

const str = 'foo1bar2baz3';
const matches = str.matchAll(/\d/g);

String.matchAll возвращает итератор совпадений, а не массив. Этот итератор можно использовать, чтобы получить все группы совпадений из строки.

Что представляет собой import.meta.url?

console.log(import.meta.url);

import.meta — это объект, содержащий метаданные о текущем модуле. Свойство import.meta.url представляет URL текущего модуля, который можно использовать для получения информации о том, где выполняется скрипт.

Каково значение a после логического присваивания?

let a = null;
a ||= 10;
console.log(a);

Оператор логического ИЛИ присваивания (||=) присваивает значение справа, если значение слева ложно (null, undefined, 0, false и т.д.). Поскольку a равно null, ему присваивается значение 10.

Каково значение b после nullish‑присваивания?

let b = null;
b ??= 10;
console.log(b);

Оператор присваивания с nullish‑слиянием (??=) присваивает значение справа, если значение слева равно null или undefined. Поскольку b равно null, ему присваивается значение 10.

Что предоставляет WeakRef?

const obj = { data: 'important' };
const ref = new WeakRef(obj);
console.log(ref.deref());

WeakRef предоставляет слабую ссылку на объект, что позволяет сборщику мусора удалить объект, если нет других ссылок. Поскольку obj здесь всё ещё сильно ссылается, deref() возвращает исходный объект. Если цель была бы освобождена, deref() вернёт undefined.