Типы данных Flashcards

1
Q

Какие примитивные типы данных существуют?

A

существует 7 примитивных типов данных: string, number, boolean, symbol, null, undefined, bigint.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Для чего используются объекты-обертки String, Number, Boolean, Symbol, BigInt?

A

объекты-обертки String, Number, Boolean, Symbol, BigInt используются для расширения функционала примитивов. Они включают все методы примитивов, что позволяет использовать методы для примитивов и при этом сохранить скорость работы примитивов на прежнем уровне.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Могут ли создаваться объекты-обертки для примитивных типов данных?

A

да, объекты-обертки могут быть созданы для примитивных типов данных через обращение к свойству примитива через точку.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Как не рекомендуется использовать конструкторы String, Number, Boolean?

A

Конструкторы String, Number, Boolean не рекомендуется использовать с оператором new, так как могут быть ошибки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Можно ли использовать конструкторы String, Number, Boolean без оператора new?

A

да, конструкторы String, Number, Boolean могут быть использованы без оператора new для преобразования типов данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Имеют ли null и undefined объекты-обёртки и методы?

A

Нет, у null и undefined нет объектов-обёрток и методов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что происходит при попытке создания свойства у null или undefined?

A

При попытке создания свойства у null или undefined возникает ошибка.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что происходит, когда пытаются создать свойство у примитивного типа данных?

A

Если попытаться добавить свойство к примитиву, то JS создаст временный объект-обертку с этим свойством, но после завершения операции объект-обертка уничтожится и изменения не сохранятся.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое 64-битный формат IEEE-754?

A

64-битный формат IEEE-754 — это стандарт для представления чисел с плавающей точкой в компьютерах. В JS он используется для хранения чисел типа number, который использует 64 бита для представления числа и включает знак, мантиссу и экспоненту.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как записать число в научном формате?

A

Число можно записать в научном формате, используя экспоненту: например, let billion = 1e9; // 1000000000.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как представить число в системе счисления с основанием 16?

A

Число можно представить в системе счисления с основанием 16, используя префикс 0x: let a = 0xff; // 255.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Какие методы округления чисел есть в JavaScript?

A

В JavaScript есть несколько методов округления чисел: Math.floor (округление в меньшую сторону), Math.ceil (округление в большую сторону), Math.round (округление до ближайшего целого) и Math.trunc (удаление дробной части без округления).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как округлить число до определенного количества знаков после запятой?

A

Число можно округлить до определенного количества знаков после запятой, используя метод toFixed(n): let num = 12.34; alert(num.toFixed(1)); // “12.3”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Как решить проблему потери точности при работе с дробными числами в JavaScript?

A

Наиболее надежный способ избежать проблемы потери точности при работе с дробными числами в JavaScript - использовать метод toFixed(n), который округляет число до определенного количества знаков после запятой.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что такое IEEE-754 и как это связано с нулями 0 и -0?

A

IEEE-754 - это стандарт для представления чисел с плавающей точкой в компьютерах. Этот стандарт использует прямой код, из-за чего возникают два разных представления для нуля: положительный 0 и отрицательный 0 (-0).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что делает функция isNaN() и как она отличается от проверки на равенство с NaN?

A

isNaN() преобразует свой аргумент в число и проверяет, является ли оно NaN. При этом, NaN не равен ничему, даже самому себе, поэтому проверка на равенство с NaN с помощью оператора === всегда возвращает false.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Что делает функция isFinite() и как она отличается от проверки на равенство с Infinity/-Infinity?

A

isFinite() преобразует свой аргумент в число и возвращает true, если это число является конечным (то есть не равно NaN/Infinity/-Infinity). Проверка на равенство с Infinity/-Infinity с помощью оператора === также может использоваться для определения бесконечных значений, но isFinite() более удобна в использовании.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Какие особенности есть у функции Object.is()?

A

Object.is() осуществляет строгое сравнение значений с учетом нескольких особых правил:
- он возвращает true для двух NaN, в отличие от оператора ===;
- он возвращает false для двух нулей с разными знаками, в отличие от оператора ===;
- в остальных случаях Object.is() эквивалентен оператору ===.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Какие функции используют для явного преобразования строки в число и как они отличаются друг от друга?

A

Для явного преобразования строки в число используют функции +/Number(), parseInt() и parseFloat(). Отличие между ними в том, что +/Number() преобразуют строку в число с учетом возможности наличия десятичной точки, а функции parseInt() и parseFloat() преобразуют только целое или десятичное число соответственно, игнорируя любой другой текст, находящийся в строке.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Как использовать функцию parseInt() для чтения чисел в других системах счисления?

A

Для чтения чисел в других системах счисления с помощью функции parseInt() нужно передать второй параметр radix, указывающий на основание системы счисления. Значение radix должно быть между 2 и 36, по умолчанию оно равно 10.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Какой формат используется для строк в JavaScript?

A

Всегда используется формат UTF-16, независимо от кодировки страницы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Какие типы кавычек можно использовать для создания строк в JavaScript?

A

Можно использовать двойные кавычки (“ “), одинарные кавычки (‘ ‘), и обратные кавычки (``).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Какой преимущественный метод работы с обратными кавычками в JavaScript?

A

Обратные кавычки могут содержать выражения и позволяют записывать более одной строки в одну.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Какие символы оставлены для обратной совместимости, но сейчас не используются?

A

\b, \f, \v

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Как задать символ с шестнадцатеричным Юникодным кодом XX?

A

\xXX

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Как задать символ в кодировке UTF-16 с шестнадцатеричным кодом XXXX?

A

\uXXXX

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Как задать символ в кодировке UTF-32 с шестнадцатеричным кодом от U+0000 до U+10FFFF?

A

\u{X…XXXXXX} (от 1 до 6 шестнадцатеричных цифр)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Что содержит свойство length у строки?

A

Длину строки

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Как получить символ по определенной позиции в строке?

A

С помощью квадратных скобок str[pos] или с помощью метода charAt(pos) (старый метод).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Что вернется при попытке получить символ в позиции, которой нет в строке с помощью str[pos]?

A

undefined.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Что вернется при попытке получить символ в позиции, которой нет в строке с помощью метода charAt(pos)?

A

Пустая строка

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Как можно итерироваться по строке посимвольно?

A

С помощью цикла for..of.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Можно ли изменить содержимое строки?

A

Нельзя. Строки неизменяемы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Что делает метод str.indexOf(substr)?

A

Метод str.indexOf(substr) ищет подстроку substr в строке str и возвращает позицию первого символа найденной подстроки. Если искомая подстрока не найдена, метод возвращает -1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Что делает необязательный второй аргумент метода str.indexOf(substr, position)?

A

Необязательный второй аргумент метода str.indexOf(substr, position) позволяет начать поиск подстроки с определенной позиции position в строке str.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Что делает метод str.lastIndexOf(substr)?

A

Метод str.lastIndexOf(substr) ищет последнее вхождение подстроки substr в строке str и возвращает позицию первого символа найденной подстроки. Если искомая подстрока не найдена, метод возвращает -1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

Как исправить ошибку, возникающую при проверке методом str.indexOf() в условии if?

A

Чтобы избежать ошибки, возникающей при проверке методом str.indexOf() в условии if, нужно сравнить результат метода с -1, например, используя следующую конструкцию: if (str.indexOf(“Widget”) != -1). Метод “includes” – более современный.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

Что такое метод includes и какой тип данных он возвращает?

A

Метод includes проверяет, содержится ли подстрока в строке, и возвращает значение true, если содержится, и false, если не содержится.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Как использовать метод includes для поиска подстроки в определенной позиции?

A

Метод includes имеет второй аргумент, который позволяет начать поиск с определенной позиции. Например, “Midget”.includes(“id”, 3) вернет false, поскольку поиск начинается с позиции 3.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

Что делает метод startsWith для строки?

A

Метод startsWith проверяет, расположена ли искомая подстрока в начале строки. Например, “Widget”.startsWith(“Wid”) вернет true, поскольку “Wid” является началом “Widget”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

Зачем нужен метод endsWith в строках?

A

Метод endsWith проверяет, расположена ли искомая подстрока в конце строки. Например, “Widget”.endsWith(“get”) вернет true, поскольку “get” является концом “Widget”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

Что такое метод slice и какие аргументы он принимает?

A

Метод slice возвращает часть строки в диапазоне [start, end). Он принимает два аргумента: start - начальную позицию, end - конечную позицию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

Как использовать метод slice, если необходимо получить часть строки от начальной позиции до конца строки?

A

Если необходимо получить часть строки от начальной позиции до конца строки, можно вызвать метод slice с одним аргументом - начальной позицией. Например, “stringify”.slice(2) вернет “ringify”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

Что произойдет, если задать отрицательное значение для аргументов start и end в методе slice?

A

Если задать отрицательное значение для аргументов start и end в методе slice, то отсчет будет идти с конца строки. Например, “stringify”.slice(-4, -1) вернет “gif”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

Что такое метод substring и какие аргументы он принимает?

A

Метод substring возвращает часть строки в диапазоне [start, end). Он принимает два аргумента: start - начальную позицию, end - конечную позицию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

Какой метод строки возвращает часть строки от start длины length?

A

Метод substr.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

Можно ли задать отрицательные аргументы для метода substring?

A

Нет, отрицательные аргументы не поддерживаются для метода substring.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

Что возвращает метод slice, если задать start больше end:
1. для строки;
2. для массива.

A

Метод slice вернет:
1. пустую строку;
2. пустой массив.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

Как сравниваются строки?

A

Строки сравниваются исходя из кодировки каждого символа в строке.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
50
Q

Что возвращает метод str.codePointAt(pos)?

A

Метод str.codePointAt(pos) возвращает код символа, находящего на позиции pos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
51
Q

Что делает метод String.fromCodePoint(code)?

A

Метод String.fromCodePoint(code) создает символ по коду code.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
52
Q

Какое правильное сравнение строк при работе с разными языками?

A

Правильное сравнение при работе с разными языками - метод str.localeCompare(str2), который возвращает:
- -1, если str < str2,
- 1, если str > str2,
- 0, если str = str2.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
53
Q

Какие два способа объявления массива существуют?

A

let arr = new Array();
let arr = [];

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
54
Q

Как получить последний элемент массива? Какими методами можно это сделать?

A

Два способа:
arr[arr.length - 1]
arr.at(-1) (новый метод)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
55
Q

Какие методы используются для добавления и удаления элементов в конец массива?

A

Для добавления элементов в конец массива используется метод push().
Для удаления последнего элемента массива используется метод pop().

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
56
Q

Какие методы используются для добавления и удаления элементов в начало массива?

A

Для добавления элементов в начало массива используется метод unshift().
Для удаления первого элемента массива используется метод shift().

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
57
Q

Почему методы pop/push эффективнее, чем shift/unshift?

A

Это связано с тем, что методы shift/unshift работают с началом массива и при удалении или добавлении элемента приходится перезаписывать индексы всех оставшихся элементов. Для методов pop/push этого делать не нужно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
58
Q

Какое свойство массива хранит не количество элементов, а индекс последнего элемента + 1?

A

Свойство length хранит не количество элементов, а индекс последнего элемента + 1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
59
Q

Как можно очистить массив?

A

С помощью length можно легко очистить массив: arr.length = 0;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
60
Q

Перечислите некоторые ошибки, которые могут возникнуть при работе с массивами.

A

Некоторые ошибки, которые могут возникнуть при работе с массивами:
- добавление нечислового свойства, например, arr.test = 5;
- создание «дыр»: например, добавление arr[0], затем arr[1000];
- заполнение массива в обратном порядке.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
61
Q

Как можно создать массив заданной длины?

A

Массив заданной длины можно создать, вызвав конструктор new Array() с одним аргументом, который задает длину массива. Например:
let arr = new Array(5); // создастся массив с длиной 5.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
62
Q

Какой метод возвращает список элементов массива через запятую?

A

Метод toString() возвращает список элементов массива через запятую. Это связано с тем, что в конструкторе массиве имеется обработчик хинта, который и занимается выводом элементов в виде строки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
63
Q

Какой метод массивов можно использовать для добавления, удаления и замены элементов в массиве?

A

Метод splice.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
64
Q

Что произойдет, если попытаться удалить элемент массива с помощью оператора delete?

A

Элемент удалится, а вместо него в массиве будет значение undefined, так как удаляется значение “по ключу”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
65
Q

Какие параметры принимает метод splice?

A

Метод splice принимает следующие параметры: index - начальная позиция, может быть отрицательной, тогда отсчет начинается с конца, deleteCount - количество элементов, которое необходимо удалить, elem1, …, elemN - добавление элементов в массив на место удаленных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
66
Q

Что возвращает метод splice?

A

Метод splice возвращает массив удаленных элементов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
67
Q

Что возвращает метод slice()?

A

Метод slice() возвращает новый массив, в который копирует элементы массива в диапазоне от start до end (не включая end).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
68
Q

Что произойдет, если вызвать метод slice() без аргументов?

A

Если вызвать метод slice() без аргументов, то будет создана копия исходного массива.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
69
Q

Что делает метод массива concat()?

A

Метод concat() создает новый массив, в который копирует элементы других массивов или просто вставляет какие-либо аргументы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
70
Q

Как можно скопировать объект в массив при использовании метода массива concat()?

A

Для того чтобы скопировать объект в массив при использовании метода concat(), объекту нужно применить специальное свойство Symbol.isConcatSpreadable и обязательно добавить свойство length, чтобы объект получился подобным массиву.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
71
Q

Что делает метод forEach() у массивов?

A

Метод forEach() перебирает каждый элемент массива и выполняет заданную функцию для каждого элемента.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
72
Q

Какой метод массивов используется для поиска индекса элемента в массиве?

A

Для поиска индекса элемента в массиве можно использовать методы indexOf(), lastIndexOf().

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
73
Q

Какие значения возвращает метод indexOf() при поиске элемента в массиве?

A

Метод indexOf() возвращает индекс элемента, если он был найден в массиве, и -1, если элемент не найден.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
74
Q

Как работает метод includes() при поиске элемента в массиве и в чем отличие от метода indexOf()?

A

Метод includes() также ищет элемент в массиве, но в отличие от метода indexOf() он умеет правильно обрабатывать значение NaN. Метод includes() возвращает true, если элемент найден, и false в противном случае.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
75
Q

Что делает метод find() у массивов?

A

Метод find() перебирает каждый элемент массива и выполняет заданную функцию для каждого элемента. Если функция вернула true для текущего элемента, метод find() возвращает этот элемент и прекращает перебор. Если все итерации оказались ложными, возвращается undefined.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
76
Q

Какой метод массивов используется для поиска индекса элемента в массиве, аналогичный методу find(), но возвращающий не сам элемент, а его индекс?

A

Метод findIndex(). Если элемент не найден, то возвращает -1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
77
Q

Что такое метод filter и как он работает?

A

Метод filter() используется для фильтрации массива. Он принимает функцию, которая проверяет каждый элемент массива на условие и возвращает новый массив с элементами, для которых условие выполняется.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
78
Q

В чем отличие метода filter от метода find?

A

Метод filter() возвращает массив элементов, которые прошли проверку на соответствие условию, в то время как метод find() возвращает первый элемент массива, который прошел проверку на соответствие условию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
79
Q

Что такое метод map и как он работает?

A

Метод map() используется для преобразования массива. Он принимает функцию, которая вызывается для каждого элемента массива и возвращает новый массив с результатами выполнения этой функции для каждого элемента.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
80
Q

Что такое метод reduce и как он работает?

A

Метод reduce() используется для вычисления единого значения на основе массива. Он принимает функцию, которая вызывается для каждого элемента массива и принимает два аргумента: результат предыдущего вызова функции и текущий элемент массива. Метод reduce() возвращает результат выполнения этой функции.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
81
Q

Что такое метод reduceRight и в чем его отличие от метода reduce?

A

Метод reduceRight() выполняет ту же функцию, что и метод reduce(), но перебор элементов массива начинается с конца массива.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
82
Q

Что делает метод split() для строк?

A

Метод split() для строк разделяет строку в элементы массива через разделитель, который передается аргументом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
83
Q

Как работает метод join() для массивов?

A

Метод join() создает строку из элементов массива, вставляя между ними заданный разделитель.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
84
Q

Что делает метод sort() для массивов?

A

Метод sort() для массивов сортирует элементы массива в порядке возрастания как строки.

85
Q

Что делает метод reverse() для массивов?

A

Метод reverse() для массивов переворачивает порядок элементов в массиве на обратный.

86
Q

Как проверить, является ли переданный аргумент массивом?

A

Использовать метод Array.isArray().

87
Q

Какой результат вернет typeof для массива и объекта?

A

Для массива и объекта typeof вернет “object”.

88
Q

Для чего используется параметр thisArg в методах find, filter, map и других?

A

Параметр thisArg позволяет передавать контекст, в котором будет вызываться функция.

89
Q

Обязательный ли параметр thisArg в методах find, filter, map и других?

A

Параметр thisArg не является обязательным

90
Q

Что такое перебираемые объекты в JavaScript?

A

Перебираемые объекты в JavaScript - это объекты, которые имеют метод Symbol.iterator, позволяющий перебирать элементы объекта в цикле for..of.

91
Q

Почему можно перебирать массив или строку в цикле for..of?

A

Массивы и строки можно перебрать в цикле for..of, так как у них есть свойство Symbol.iterator.

92
Q

Можно ли перебрать объект в цикле for..of? Если да, то как это сделать?

A

Объекты нельзя перебрать в цикле for..of, но можно сделать объект итерируемым, добавив ему метод Symbol.iterator.

93
Q

Что должен возвращать метод Symbol.iterator объекта?

A

Метод Symbol.iterator должен возвращать итератор - объект с методом next().

94
Q

Как работает цикл for..of с перебираемыми объектами?

A

Когда цикл for..of запускается, он вызывает метод Symbol.iterator объекта, который должен вернуть итератор - объект с методом next(). Затем for..of работает только с этим итератором, вызывая метод next() на каждой итерации цикла.

95
Q

Являются ли строка итерируемым объектом?

A

Да

96
Q

Что такое псевдомассив?

A

Псевдомассив - это объект, у которого есть индексы и свойство length, что позволяет работать с ним как с массивом, но он не имеет стандартных методов массивов.

97
Q

Какие методы массивов нельзя использовать с псевдомассивом?

A

С псевдомассивом нельзя использовать методы массивов, такие как push, pop, shift, unshift и другие.

98
Q

Что делает метод Array.from()?

A

Метод Array.from() позволяет преобразовать итерируемый объект или псевдомассив в настоящий массив.

99
Q

Какие аргументы может принимать метод Array.from()?

A

Метод Array.from() может принимать на вход итерируемый объект или псевдомассив. Также на вход метод принимает функцию-трансформер (mapFn) и контекст (thisArg) для этой функции.

100
Q

Как происходит преобразование итерируемого объекта или псевдомассива в массив с помощью метода Array.from()?

A

Метод Array.from() проверяет, является ли переданный аргумент итерируемым объектом или псевдомассивом, создает новый массив и копирует в этот массив все элементы.

101
Q

Как можно использовать метод Array.from() для применения трансформирующей функции к элементам итерируемого объекта или псевдомассива?

A

Метод Array.from() может принимать на вход функцию-трансформер (mapFn), которая будет применена к каждому элементу итерируемого объекта или псевдомассива, а результаты выполнения функции будут записаны в итоговый массив.

102
Q

Что произойдет, если методу Array.from() передать объект, который не является ни итерируемым объектом, ни псевдомассивом?

A

Будет выброшена ошибка.

103
Q

Какое отличие коллекции Map от объекта Object?

A

Map позволяет использовать в качестве ключа объект и любой примитив, а для Object все ключи преобразуются в строку.

104
Q

В каком порядке хранятся свойства в коллекции Map?

A

Свойства в коллекции Map хранятся в порядке их добавления.

105
Q

Какие методы можно использовать для перебора коллекции Map?

A

Для перебора коллекции Map можно использовать методы: map.keys(), map.values() и map.entries().

106
Q

Какой метод можно использовать для выполнения функции для каждой пары (ключ, значение) в коллекции Map?

A

Для выполнения функции для каждой пары (ключ, значение) в коллекции Map можно использовать метод forEach.

107
Q

Что такое Map в JavaScript?

A

Map - это коллекция в JavaScript, которая хранит пары ключ-значение и позволяет использовать любые типы данных в качестве ключей.

108
Q

Как создать Map в JavaScript?

A

Можно создать Map с помощью оператора new, например, let map = new Map(). Можно также передать итерируемый объект в качестве аргумента конструктора, чтобы сразу заполнить Map парами ключ-значение.

109
Q

Как получить значение из Map в JavaScript?

A

Для получения значения из Map можно использовать метод get(), например, map.get(key), где key - ключ, по которому нужно найти значение

110
Q

Как создать Map из обычного объекта в JavaScript?

A

Для создания Map из обычного объекта в JavaScript можно воспользоваться методом Object.entries(), который возвращает пары ключ-значение объекта. Затем эти пары можно передать в качестве аргумента конструктора Map.

111
Q

Как создать обычный объект из Map в JavaScript?

A

Для создания обычного объекта из Map в JavaScript можно воспользоваться методом Object.fromEntries(), который принимает итерируемый объект с парами ключ-значение и возвращает объект. Можно также использовать метод entries() для получения итерируемого объекта пар ключ-значение из Map, а затем передать его в метод Object.fromEntries().

112
Q

Что такое множество Set?

A

Множество Set - это коллекция уникальных значений.

113
Q

Как добавить значение в Set?

A

Используйте метод set.add(value).

114
Q

Что произойдет, если добавить в Set значение, которое уже есть в нем?

A

Ничего не произойдет, т.к. значения в Set уникальны.

115
Q

Как удалить значение из Set?

A

Используйте метод set.delete(value).

116
Q

Как проверить, есть ли значение в Set?

A

Используйте метод set.has(value).

117
Q

Как очистить Set?

A

Используйте метод set.clear().

118
Q

Как получить количество элементов в Set?

A

Используйте свойство set.size

119
Q

Как перебрать все значения в Set?

A

Используйте цикл for..of или метод set.forEach().

120
Q

Как получить значения, ключи и пары значений и ключей в Set?

A

Используйте методы set.values(), set.keys() и set.entries().

121
Q

Что такое WeakMap?

A

WeakMap - это специальный тип объекта Map в JavaScript, который позволяет использовать объекты в качестве ключей и автоматически удаляет связанные с ними данные, когда эти объекты удаляются из памяти.

122
Q

Какие отличия есть между WeakMap и Map?

A
  • В WeakMap в качестве ключей могут выступать только объекты,
  • WeakMap не поддерживает методы keys(), values() и entries()
  • WeakMap нельзя перебрать
  • Если ссылка на объект, являющегося ключом в WeakMap будет удалена, то из памяти будет удален и объект.
123
Q

Какие методы есть у WeakMap?

A

У WeakMap есть методы get(key) - получить значение по ключу, set(key, value) - сохранить значение по ключу, delete(key) - удалить свойство по ключу, has(key) - проверить, есть ли свойство по ключу.

124
Q

В чем преимущество использования WeakMap перед Map?

A

Преимущество использования WeakMap перед Map состоит в том, что если ссылка на объект, являющегося ключом в WeakMap будет удалена, то из памяти будет удален и объект, что позволяет избежать утечек памяти.

125
Q

В каких случаях лучше использовать WeakMap?

A

Лучше использовать WeakMap в тех случаях, когда необходимо связать дополнительные данные с объектами, но эти объекты могут быть удалены из памяти. Например, для хранения дополнительных данных о пользователях в веб-приложениях.

126
Q

В каких случаях не стоит использовать WeakMap?

A

WeakMap не стоит использовать, если нужно хранить данные, связанные с примитивами, или если нужно использовать ключи, которые не могут быть объектами. Также не стоит использовать WeakMap, если нужно сохранять данные на протяжении всего жизненного цикла программы, так как в этом случае они будут автоматически удалены из памяти, когда больше не будут использоваться.

127
Q

Какие типы значений могут быть добавлены в WeakSet?

A

В WeakSet в качестве значений могут выступать только объекты.

128
Q

Какие методы не поддерживаются WeakSet?

A

WeakSet не поддерживает методы keys(), values() и entries().

129
Q

Можно ли перебрать элементы в WeakSet?

A

Нет, нельзя.

130
Q

Какие методы можно использовать для работы с WeakSet?

A

Методы, которые можно использовать для работы с WeakSet, это:
weakSet.add() - добавить объект в качестве значений.
weakSet.has() - проверить, есть ли объект во множестве.
weakSet.delete() - удалить объект из множества.

131
Q

Как долго объекты находятся в WeakSet?

A

Объекты находятся в WeakSet до тех пор, пока они доступны где-то еще.

132
Q

Для каких задач можно использовать WeakSet?

A

WeakSet может использоваться как дополнительное хранилище данных, когда необходимо хранить объекты только до тех пор, пока они доступны где-то еще, и автоматически удалять их при удалении из основного хранилища данных. Например, для учета пользователей, заходивших на сайт, или для хранения прочитанных сообщений.

133
Q

Что такое методы keys(), values() и entries() для объектов?

A

Это методы, которые возвращают массив из ключей, значений и пар [ключ, значение] объекта соответственно.

134
Q

Какие методы следует использовать, если необходимо учитывать символьные свойства объекта?

A

Object.getOwnPropertySymbols() или Reflect.ownKeys(obj).

135
Q

Что вернет вызов метода Object.entries(obj)?

A

Массив пар ключ-значение объекта.

136
Q

Как преобразовать массив обратно в объект?

A

Вызвать метод Object.fromEntries(array).

137
Q

Какой метод можно использовать для подсчета суммы значений свойств объекта?

A

Метод Object.values(obj), затем метод массивов reduce().

138
Q

Как посчитать количество свойств объекта?

A

Вызвать метод Object.keys(obj), затем полученный массив свойств объекта преобразовать к его длине с помощью метода length.

139
Q

Что такое деструктуризация массива?

A

Деструктуризация массива - это синтаксис, который позволяет извлекать элементы из массива и присваивать их переменным одновременно.

140
Q

Каким образом можно пропустить какой-то элемент при деструктуризации массива?

A

Чтобы пропустить какой-то элемент, его можно просто опустить при деструктуризации массива, например: let [firstName, , title] = [“Julius”, “Caesar”, “Consul”, “of the Roman Republic”];

141
Q

Можно ли использовать деструктуризацию для присваивания значений свойств объекта?

A

Да, удобно деструктурировать свойства объектов, например: let user = {}; [user.name, user.surname] = “Ilya Kantor”.split(‘ ‘);

142
Q

Можно ли использовать деструктуризацию для итерации по ключам и значениям объекта?

A

Да, можно использовать деструктуризацию для итерации по ключам и значениям объекта, например: for (let [key, value] of Object.entries(user)) { alert(${key}:${value}); // name:John, затем age:30 }

143
Q

Можно ли использовать деструктуризацию для итерации по элементам Map?

A

Да, можно использовать деструктуризацию для итерации по элементам Map, например: for (let [key, value] of user) { alert(${key}:${value}); // name:John, затем age:30 }

144
Q

Что такое rest оператор при деструктуризации массива?

A

rest оператор (…rest) используется для сбора остальных элементов массива, которые не были присвоены другим переменным при деструктуризации. Он создает новый массив с этими элементами.

145
Q

Какие значения будут присвоены переменным при деструктуризации массива, если в массиве меньше элементов, чем в присваивании?

A

Отсутствующие значения будут равны undefined, если им не было задано значение по умолчанию.

146
Q

Как задать значение по умолчанию при деструктуризации массива?

A

Значение по умолчанию задается путем присваивания значения переменной в квадратных скобках при деструктуризации, например: let [name = “Guest”] = [“Julius”];

147
Q

Как использовать prompt при деструктуризации массива?

A

Prompt можно использовать для задания значения переменной при деструктуризации массива, если не хватает элементов в массиве. Например, можно написать let [name = prompt(‘name?’)] = [“Julius”];, и в этом случае prompt будет выполнен только если выйти за пределы массива.

148
Q

Что такое деструктуризация объекта в JavaScript?

A

Деструктуризация объекта - это способ присваивания свойств объекта переменным.

149
Q

Как задать другие имена переменным при деструктуризации объекта?

A

Другие имена переменным можно задать при помощи синтаксиса { sourceProperty: targetVariable }.

150
Q

Как задать значения по умолчанию при деструктуризации объекта?

A

Значения по умолчанию можно задать при помощи оператора “=” после имени переменной, например: let {width = 100, height = 200, title} = options;

151
Q

Можно ли использовать вместе задание переменной и значение по умолчанию?

A

Да, можно. Например: let {width: w = 100, height: h = 200, title} = options;

152
Q

Что такое rest оператор при деструктуризации объекта?

A

Rest оператор при деструктуризации объекта позволяет сохранить все остальные свойства объекта в отдельный объект.

153
Q

Что делает rest оператор при деструктуризации объекта?

A

Rest оператор при деструктуризации объекта позволяет создать новый объект, содержащий оставшиеся свойства исходного объекта.

154
Q

Какая переменная будет содержать оставшиеся свойства объекта после использования rest оператора?

A

Переменная, указанная после оператора rest (обычно это три точки), будет содержать оставшиеся свойства объекта в виде нового объекта.

155
Q

Можно ли использовать оператор rest без указания других переменных?

A

Да, можно. В этом случае оператор rest будет создавать новый объект, содержащий все свойства исходного объекта.

156
Q

Что такое вложенная деструктуризация?

A

Вложенная деструктуризация - это деструктуризация объекта, содержащего вложенные объекты или массивы.

157
Q

Каким образом можно получить значения вложенного объекта при деструктуризации?

A

Можно использовать синтаксис с двоеточием, например: let {nestedObject: {property}} = someObject.

158
Q

Как получить значения элементов вложенного массива при деструктуризации объекта?

A

Можно использовать синтаксис с квадратными скобками, например: let {nestedArray: [firstElement, secondElement]} = someObject.

159
Q

Можно ли использовать значения по умолчанию при вложенной деструктуризации?

A

Да, значения по умолчанию можно использовать при вложенной деструктуризации, так же как и в обычной деструктуризации объектов.

160
Q

Что такое умные параметры функций?

A

Умные параметры функций - это использование деструктуризации объектов в параметрах функции, чтобы иметь возможность передавать аргументы в любом порядке и присваивать им значения по умолчанию.

161
Q

Как передать значение аргумента функции по умолчанию без явного указания этого аргумента при вызове функции?

A

В параметрах функции при деструктуризации объекта присвоить этому аргументу значение по умолчанию

162
Q

Как присвоить значение по умолчанию для деструктурированного объекта в параметрах функции, чтобы при вызове можно было не писать {} в аргументы?

A

Можно присвоить пустой объект {} объектной деструктуризации

163
Q

Как создать объект даты, представляющий текущую дату и время?

A

new Date()

164
Q

Как создать объект даты, представляющий определенный момент времени, например, 1 января 2000 года 12:30 по UTC?

A

new Date(Date.UTC(2000, 0, 1, 12, 30))

165
Q

Как получить год из объекта даты?

A

Метод getFullYear(): dateObj.getFullYear()

166
Q

Как получить месяц (от 0 до 11) из объекта даты?

A

Метод getMonth(): dateObj.getMonth()

167
Q

Как получить день месяца из объекта даты?

A

Метод getDate(): dateObj.getDate()

168
Q

Как получить день недели (от 0 до 6, где 0 - воскресенье) из объекта даты?

A

Метод getDay(): dateObj.getDay()

169
Q

Как получить количество миллисекунд, прошедших с 1 января 1970 года UTC+0, из объекта даты?

A

Метод getTime(): dateObj.getTime()

170
Q

Как установить год в объекте даты?

A

Метод setFullYear(): dateObj.setFullYear(year)

171
Q

Как установить месяц (от 0 до 11) в объекте даты?

A

Метод setMonth(): dateObj.setMonth(month)

172
Q

Как установить день месяца в объекте даты?

A

Метод setDate(): dateObj.setDate(date)

173
Q

Что произойдет, если при создании объекта Date указать день больше, чем максимальное количество дней в месяце?

A

Объект Date автоматически исправит указанный день, установив первый день следующего месяца.

174
Q

Что произойдет, если при создании объекта Date указать день равный 0?

A

Объект Date автоматически исправит указанный день, установив последний день предыдущего месяца.

175
Q

Можно ли устанавливать значения компонентов даты за пределы обычного диапазона?

A

Да, значения компонентов даты можно устанавливать за пределы обычного диапазона, например, отрицательные значения.

176
Q

Как преобразовать объект Date в число?

A

Объект Date можно преобразовать в число, используя унарный плюс перед объектом Date или вызовом метода getTime() у объекта Date.

177
Q

Как получить разность между двумя объектами Date в миллисекундах?

A

Для получения разности между двумя объектами Date в миллисекундах, можно вычислить разницу между их числовыми значениями, полученными с помощью преобразования объектов Date в числа, или вызвав метод getTime() у объектов Date и вычислив разницу между их возвращаемыми значениями.

178
Q

Что такое Date.now() и почему лучше использовать его, чем создание объекта Date?

A

Date.now() - это метод, который возвращает текущую метку времени в миллисекундах с 1 января 1970 года. Его лучше использовать, чем создание объекта Date, потому что он не создает промежуточный объект, что ускоряет время выполнения программы.

179
Q

Что возвращает метод Date.parse(str)?

A

Метод Date.parse(str) возвращает таймстамп (количество миллисекунд с 1 января 1970 года UTC+0), считывая дату из строки.

180
Q

В каком формате должна быть строка для корректной работы метода Date.parse(str)?

A

Формат строки для корректной работы метода Date.parse(str) - YYYY-MM-DDTHH:mm:ss.sssZ, где YYYY-MM-DD - год-месяц-день, HH:mm:ss.sss - время (часы, минуты, секунды и миллисекунды), а Z - необязательная часть, обозначающая часовой пояс в формате +-hh:mm. Если указать просто букву Z, то получим UTC+0.

181
Q

Можно ли сразу создать объект Date из таймстампа, полученного методом Date.parse(str)?

A

Да, посредством new Date

182
Q

Что такое бенчмаркинг?

A

Бенчмаркинг - это процесс измерения производительности компьютерных систем или компонентов, путем сравнения времени выполнения определенных задач или алгоритмов.

183
Q

Почему для получения более точных результатов бенчмаркинга нужно запускать набор тестов несколько раз?

A

Нужно запускать набор тестов несколько раз, чтобы получить более точные результаты бенчмаркинга и уменьшить влияние факторов, которые могут повлиять на производительность во время выполнения тестов.

184
Q

Как можно проводить бенчмаркинг на JS?

A

с помощью let start=Date.now() запоминать время до начала выполнения какого-то выражения/функции, а после вычесть из текущего времени переменную start. Лучше смотреть пример на гитхабе.

Но лучше использовать performance.now()

185
Q

Что такое JSON?

A

JSON - это текстовый формат представления данных, основанный на JavaScript.

186
Q

Какие типы данных поддерживает JSON?

A

JSON поддерживает объекты, массивы и примитивные типы данных, такие как строки, числа, булевы значения и null.

187
Q

Какие кавычки должны быть использованы для ключей в JSON?

A

Ключи в JSON должны быть заключены в двойные кавычки.

188
Q

Поддерживает ли JSON комментарии?

A

JSON не поддерживает комментарии.

189
Q

Сколько методов для работы с JSON существует и как они называются?

A

Существует два метода для работы с JSON: JSON.stringify() и JSON.parse().

190
Q

Какой метод JSON используется для преобразования объекта в JSON?

A

Для преобразования объекта в JSON используется метод JSON.stringify().

191
Q

Какие параметры принимает метод JSON.stringify()?

A

Метод JSON.stringify() принимает значение для преобразования, массив свойств для преобразования или функцию соответствия function(key, value) и дополнительные отступы (для форматирования).

192
Q

Какой метод JSON используется для преобразования JSON в объект?

A

Для преобразования JSON в объект используется метод JSON.parse().

193
Q

Какой параметр принимает метод JSON.parse()?

A

Метод JSON.parse() принимает строку в формате JSON для преобразования в объект и функцию, которая будет вызываться для каждой пары (ключ, значение) и может преобразовывать значение.

194
Q

Что такое сериализованный объект в JSON?

A

Это объект, преобразованный в JSON с помощью метода JSON.stringify().

195
Q

Какие свойства объекта в JS пропускаются при преобразовании в JSON?

A

JSON.stringify() пропускает методы (свойства-функции), символьные ключи и значения, а также свойства со значением undefined.

196
Q

Что произойдет при попытке преобразовать объект с циклической ссылкой в JSON?

A

Будет ошибка “Преобразование циклической структуры в JSON”.

197
Q

Каким методом можно отфильтровать циклические ссылки при преобразовании объекта в JSON?

A

Можно использовать аргумент replacer метода JSON.stringify().

198
Q

Что такое replacer в методе JSON.stringify()?

A

replacer - это функция или массив, которые позволяют исключить или преобразовать определенные свойства при преобразовании объекта в JSON формат.

199
Q

Как передать массив свойств в качестве replacer в метод JSON.stringify()?

A

Массив свойств передается вторым аргументом метода JSON.stringify(). Например: JSON.stringify(obj, [‘property1’, ‘property2’])

200
Q

Как исключить определенное свойство объекта из JSON формата с помощью replacer?

A

Для исключения свойства из JSON формата в функции replacer нужно вернуть значение undefined при обнаружении нужного свойства. Например:
JSON.stringify(obj, function(key, value) {
if (key === ‘propertyToExclude’) return undefined;
return value;
});

201
Q

Как преобразовать определенное свойство объекта при преобразовании в JSON формат с помощью replacer?

A

Для преобразования свойства объекта в JSON формате в функции replacer нужно вернуть новое значение свойства. Например:
JSON.stringify(obj, function(key, value) {
if (key === ‘propertyToTransform’) return value.toUpperCase();
return value;
});

202
Q

Как работает функция replacer при преобразовании объекта с циклическими ссылками в JSON формат?

A

Функция replacer вызывается для каждого свойства объекта, включая свойства во вложенных объектах. Если объект содержит циклическую ссылку, то JSON.stringify() не может преобразовать его в JSON формат. Для предотвращения ошибки вызова функции replacer можно передать в качестве второго аргумента массив свойств или использовать глубокую копию объекта без циклических ссылок.

203
Q

Зачем нужен аргумент space в методе JSON.stringify()?

A

этот аргумент задает количество пробелов, используемых для форматирования – для красивого вывода.

204
Q

Какое свойство объекта используется для преобразования его в JSON?

A

Свойство toJSON.

205
Q

Какой метод встроенного объекта используется для преобразования в JSON со специальным поведением?

A

Метод toJSON.

206
Q

Как можно задать собственное поведение преобразования объекта в JSON?

A

Можно определить метод toJSON у объекта, который будет возвращать нужное значение для JSON-представления объекта.
Из темы по хинтам.

207
Q

Как преобразовать строку JSON в JavaScript объект?

A

Строку JSON можно преобразовать в объект JavaScript с помощью метода JSON.parse().

208
Q

Как использовать reviver функцию при парсинге JSON?

A

Функцию reviver можно передать в качестве второго аргумента метода JSON.parse(). Она вызывается для каждого свойства объекта в процессе его преобразования из JSON в объект JavaScript и может использоваться для изменения преобразования свойств объекта.

209
Q

Как можно преобразовать свойство объекта из строки в объект типа Date при парсинге JSON?

A

Можно передать функцию reviver в метод JSON.parse(), которая будет проверять свойство объекта на соответствие определенному условию (например, наличие определенного ключа) и, в случае совпадения, преобразовывать его в объект типа Date.