Что будет в консоли ?
Anonymous Quiz
14%
[1, 2, 3, 7 x null, 11]
21%
[1, 2, 3, 11]
53%
[1, 2, 3, 7 x empty, 11]
13%
ошибка
Пояснение к ответу
Когда в массив добавляется значение, которое выходит за пределы длины массива, JavaScript создает "пустые ячейки". На самом деле они имеют значение undefined, но в консоль выводятся как [1, 2, 3, 7 x empty, 11] (зависит от среды выполнения кода, от браузера).
Руководство по Next.js. 3/3
Представляю вашему вниманию третью и заключительную часть обновленного руководства по Next.js.
На мой взгляд, Next.js — это лучший на сегодняшний день инструмент для разработки веб-приложений.
Предполагается, что вы хорошо знаете JavaScript и React, а также хотя бы поверхностно знакомы с Node.js.
Обратите внимание: руководство актуально для Next.js версии 14.
При подготовке руководства я опирался в основном на официальную документацию, но в "отсебятине" мог и приврать (или просто очепятаться)
Ссылка
#статьи
Представляю вашему вниманию третью и заключительную часть обновленного руководства по Next.js.
На мой взгляд, Next.js — это лучший на сегодняшний день инструмент для разработки веб-приложений.
Предполагается, что вы хорошо знаете JavaScript и React, а также хотя бы поверхностно знакомы с Node.js.
Обратите внимание: руководство актуально для Next.js версии 14.
При подготовке руководства я опирался в основном на официальную документацию, но в "отсебятине" мог и приврать (или просто очепятаться)
Ссылка
#статьи
(() => {
let x, y
try {
throw new Error()
} catch (x) {
(x = 1), (y = 2)
console.log(x)
}
console.log(x)
console.log(y)
})()
Что будет в консоли ?
Anonymous Quiz
28%
1 undefined 2
15%
undefined undefined undefined
30%
1 1 2
27%
1 undefined undefined
Пояснение к ответу
Блок catch принимает параметр x. Это не тот x, который объявлен перед блоком try. Мы присваиваем этому аргументу значение 1, а переменной y - 2. После этого мы выводим в консоль значение x, т.е. 1. За пределами catch x все еще имеет значение undefined, а y - 2. Когда мы вызываем console.log(x) за пределами catch, возвращается undefined, а console.log(y) возвращает 2.
const result =
[[0, 1], [2, 3]].reduce(
(acc, cur) => {
return acc.concat(cur)
},
[1, 2]
)
console.log(result)
Что будет в консоли ?
Anonymous Quiz
24%
[0, 1, 2, 3, 1, 2]
5%
[6, 1, 2]
67%
[1, 2, 0, 1, 2, 3]
4%
[1, 2, 6]
Пояснение к ответу
[1, 2] - начальное значение переменной acc. После первого прохода acc равняется [1, 2], а cur - [0, 1]. После конкатенации (объединения) acc равняется [1, 2, 0, 1], а cur - [2, 3]. После их объединения, мы получаем [1, 2, 0, 1, 2, 3].
Что будет в консоли ?
Anonymous Quiz
7%
false true false
63%
false false true
15%
false true true
15%
true true false
Пояснение к ответу
null - это false. !null возвращает true. !true возвращает false. "" - это false. !"" возвращает true. !true возвращает false. 1 - это true. !1 возвращает false. !false возвращает true.
function* generator(i) {
yield i
yield i * 2
}
const gen = generator(10)
console.log(gen.next().value)
console.log(gen.next().value)
Что будет в консоли ?
Anonymous Quiz
11%
[0, 10] и [10, 20]
12%
20 и 20
69%
10 и 20
7%
0, 10 и 10, 20
Пояснение к ответу
Выполнение обычных функций не может быть остановлено после их запуска. Однако, генераторы можно останавливать в процессе выполнения, а затем продолжать с места остановки. Каждый раз, когда в функции-генераторе встречается ключевое слово yield, функция возвращает значение, указанное после него. Обратите внимание, что в генераторе вместо return используется yield. Сначала мы инициализируем генератор с i равным 10. Мы вызываем генератор, используя метод next. Когда мы в первый раз вызываем генератор, iравняется 10. Движок JavaScriptвстречает первое ключевое слово yieldи возвращает значение i. После этого выполнение функции приостанавливается и 10 выводится в консоль. Затем мы снова вызываем функцию посредством next(). Она запускается с того места, где остановилась, с i равным 10. Движок встречает следующее ключевое слово yield и возвращает i * 2. iравно 10, поэтому возвращается 20.
const firstPromise = new Promise((res, rej) => {
setTimeout(res, 500, "one")
})
const secondPromise = new Promise((res, rej) => {
setTimeout(res, 100, "two")
})
Promise.race([firstPromise, secondPromise]).then(res => console.log(res))
Пояснение к ответу
Когда мы передаем несколько промисов методу race, он возвращает первый разрешенный (выполненный или отклоненный) промис. В функцию setTimeout мы передаем задержку в 500 мс для первого промиса и в 100 мс - для второго. Это означает, что secondPromise разрешается первым со значением two. Переменная res имеет значение two, которое и выводится в консоль.
Когда мы передаем несколько промисов методу race, он возвращает первый разрешенный (выполненный или отклоненный) промис. В функцию setTimeout мы передаем задержку в 500 мс для первого промиса и в 100 мс - для второго. Это означает, что secondPromise разрешается первым со значением two. Переменная res имеет значение two, которое и выводится в консоль.