JS Theory Flashcards

1
Q

В чем разница между == и ===?

A
== сравнение с приведением типов (приводит все к числам)
=== сравнение без приведения типов (сначала typeof, потом значения)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что делает forEach?

A

Метод для перебора
Аналог for для перебора массива, ничего не возвращает

arr.forEach(function(elem, i, array) {
alert( i + “: “ + elem+ “ (массив:” + array + “)” );
});

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

Что делает filter?

A

Метод для фильтрации

let results = arr.filter(function(item, index, array) {
  // если true - элемент добавляется к результату, и перебор продолжается
  // возвращается пустой массив в случае, если ничего не найдено
});
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что делает map?

A

Метод для трансформации

let result = arr.map(function(item, index, array) {
  // возвращается новое значение вместо элемента
});
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что делает reduce?

A

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

let value = arr.reduce(function(previousValue, item, index, array) {
  // ...
}, [initial]

При отсутствии initial в качестве первого значения берётся первый элемент массива, а перебор стартует со второго.

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

Как создать объект?

A
const obj = {...}
const obj = new Object(){...}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как создать массив?

A

let arr = []
let arr = new Array(“Яблоко”, “Груша”, “и тд”);
НО let arr = new Array(2) = [undefined, undefined]
и Array.of(2) = [2];

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

Как создать массив из итерируемого объект в массив?

A

Array.from(obj)

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

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

A

Это объекты, у которых есть индексы и свойство length, но не поддерживаются методы массивов

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

Что такое bind?

A

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

let user = {
  firstName: "Вася",
  sayHi() {
    alert(`Привет, ${this.firstName}!`);
  }
};

let sayHi = user.sayHi.bind(user);

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

Что такое самозапускающаяся функция?

A

(function(){})() - функция, которая вызывается и выполняется сразу после объявления и изолирует все переменные и функции от глобального контекста

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

Что такое замыкание?

A

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

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

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

A

Это спец.синтаксис, позволяющий распаковать массив или объект в набор переменных

let arr = [“Ilya”, “Kantor”]
let [firstName, surname] = [“Ilya”, “Kantor”];

let vegetables = ['🍅', '🍄', '🥕'];
let tomato = vegetables[0];
let mushroom= vegetables[1];
let carrot= vegetables[2];
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое оператор …?

A

Если … располагается в конце списка аргументов функции, то это «остаточные параметры» (rest). Он собирает остальные неуказанные аргументы и делает из них массив.
Если … встретился в вызове функции или где-либо ещё, то это «оператор расширения» (spread). Он извлекает элементы из массива.

let arr = [3, 5, 1];
let arr2 = [8, 9, 15];

let merged = [0, …arr, 2, …arr2];

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

Отличие стрелочных функций?

A

1) Нет arguments

2) Не имеет контекста, т.е. не имеет собственного this. Она берет this в месте объявления, а обычная в месте выполнения.

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

Как задать метод прототипу?

A

Object.prototype.method = …

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

Как унаследовать объект?

A

const obj2 = Object.create(obj1)

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

Особенность создания объектов?

A

Все созданные объекты ссылаются на прототип

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

Что такое map?

A

Map – это коллекция ключ/значение, как и Object.
Map позволяет использовать ключи любого типа, а
Object приводит ключи к строкам

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

Что такое set?

A

Особый тип коллекции - Множество где каждый элемент уникален, т.е. добавление двух одинаковых ничего даст

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

Как узнать есть ли свойство у объекта?

A

obj.hasOwnProperty(prop) и в отличие от оператора in, этот метод не проверяет существование свойств в цепочке прототипов объекта.

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

Какие значения возвращают false?

A

0, null, undefined, NaN, ‘’

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

Что такое arguments?

A

Объект - список всех аргументов функции

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

Как отслеживать ошибки?

A

try, catch

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

Что такое event loop?

A

По сути, это бесконечный цикл, который ожидает задачи в стеке вызовов (call stack), исполняет их и снова ожидает появления новых. При этом он добавляет любой найденный вызов функции в стек вызовов и выполняет каждый по порядку.

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

Как скопировать функцию?

A

let newFunc = func; Без круглых скобок

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

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

A

Math.floor - в меньшую сторону
Math.ceil - в большую сторону
Math.round - до ближайшего целого
Math.trunc - удаление дробной части без округления
toFixed(n) - до n знаков после запятой и возвращает строку

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

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

A

1) num+””;
2) String(num);
3) num.toString(система счисления);
4) num.toFixed(знаков после запятой)
5) num.toPrecision ();
6) num.toExponential ();

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

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

A

1) +str
2) Number(строка десятичных чисел, можно пробел в конце или начале);
3) parseInt(str);
4) parseFlow(str);

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

Что такое чистая функция?

A

1) Каждый раз функция возвращает одинаковый результат, когда она вызывается с тем же набором аргументов
2) Нет побочных эффектов

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

Что такое побочный эффект функции?

A

Любая работа, выполняемая функцией, не связанная с вычислением конечного результата, т.е. влияющая на внешний мир (изменение глоб.переменной, console.log, запросы DOM, HTTP запросы)

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

В чем отличие параметров от аргументов функции?

A

Правильно говорить «функция принимает параметры», нопри этом мы«передаём функцииаргументы».
Параметрами называются значения, которые мызадаёмвмомент объявления функции. Ихже мыиспользуем ивтеле функции.
Аргументами называют значения, которые мыпередаём вфункциюпри еёвызове.

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

Что такое promise?

A

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

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

Что такое стек вызовов?

A

Это структура данных, которая записывает строки выполняемых инструкций и выполняет их. После выполнения удаляет.

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

Три состояния promise?

A
  1. Промис в состоянии ожидания (pending). Когда вы не знаете, получите ли вы мобильный телефон к следующей неделе или нет.
  2. Промис решен (resolved). Вам реально купят новый телефон.
  3. Промис отклонен (rejected). Вы не получили новый мобильный телефон, так как всё-таки, мама была не в настроении.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Что такое hoisting?

A

Перенос var (частичное поднятие) или function (полное поднятие) в верхнюю часть их функциональной/локальной области видимости или в глобальную область видимости

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

Что такое объявление переменной?

A

Присвоение имени

var a;

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

Что такое инициализация переменной?

A

Присвоение значения переменной

a = 10;

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

Отличия var, let, const

A

1) var имеет область действия функции;
2) поднимется только объявление var, а не инициализация;
3) let, const имеют блочную область видимости
4) let, const можно объявить только один раз
5) const нельзя объявить без инициализации
6) let в цикле создает отдельную переменную для каждой итерации

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

Отличие spread и arguments?

A

1) Стрелочные функции не имеют “arguments”
2) Псевдомассив не поддерживает методы массивов
3) Всегда содержит все аргументы функции — мы не можем получить их часть

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

NaN === NaN

A

false

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

1 % 0

A

NaN

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

Пример импорта встроенной библиотеки

A

import path from ‘path’;

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

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

A

import * as solution from ‘./solution’;

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

Как импортировать модуль?

A

import { foo, bar } from ‘./file’;

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

Как переименовать переменную при импорте?

A

import { foo as foo1 } from ‘./file’;

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

Как сделать экспорт по-умолчанию?

A
const foo = ...;
export default foo;
1) можно изменить имя при импорте
2) после экспорта нельзя указывать const, var, lets
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

Как экспортировать модуль?

A
export const foo = ...;
или
const foo = ...;
const bar = ...;
export { foo, bar };
49
Q

Что такое предикат?

A

ф-ия которая возвращает true или false

50
Q

Как добавить элемент в массив?

A

1) arr[22] = “str”, если элементов меньше 22 не занятые будут undefined
2) arr.push(‘str’) - добавит в конец

51
Q

Для чего нужен use strict?

A

Директива для включения строго режима он заменяет исключениями некоторые ошибки, которые js пропускает по-умолчанию для совместимости со старыми версиями

52
Q

Особенности строк

A

1) иммутабельные - т.е. при действии со строкой создается новая, а не изменяется старая
2) сравнение лексиграфичекое - код во внутренней таблице кодирования (utf-16)

53
Q

Как работает || ?

A

Находит первое true и возвращает исходное его значение, если все false возвращает последнее исходное

54
Q

Как работает && ?

A

Находит первое false значение и возвращает исходное его значение, если все true возвращает последнее исходное

55
Q

Назовите методы добавления и удаления массивов?

A

push/pop - добавляет и возвращает длину/удаляет и возвращает последний элемент
unshift/shift - - добавляет и возвращает длину/удаляет и возвращает первый элемент

56
Q

Для чего for..of ?

A

Для перебора массива без доступа к номеру текущего элемента, только к его значению

let fruits = [“Яблоко”, “Апельсин”, “Слива”];
for (let fruit of fruits) {
alert( fruit );
}

57
Q

Для чего for..in ?

A

Для перебора все свойств объекта по ключу! Выполняет перебор всех свойств объекта, а не только цифровых. Кроме того медленнее for of

let arr = [“Яблоко”, “Апельсин”, “Груша”];

for (let key in arr) {
alert( arr[key] );
}

58
Q

Назовите методы для работы с JSON?

A

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

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

59
Q

Что такое this ?

A

Ключевое слово this указывает на конкретный объект (контекст вызова), а именно на тот объект, на котором была вызвана функция (метод).

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

60
Q

Для чего нужны замыкания?

A

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

61
Q

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

A

Через async

let url = ‘https://…;

let response = await fetch(url);
let commits = await response.json(); // читаем ответ в формате JSON
alert(commits[0].author.login);

Через promise

fetch(url)
.then(response => response.json())
.then(commits => alert(commits[0].author.login));

62
Q

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

A

str.split(delim)

63
Q

Что такое всплытие?

A

Когда на элементе происходит событие, обработчики сначала срабатывают на нём, потом на его родителе, затем выше и так далее, вверх по цепочке предков вплоть до объекта document, а иногда даже до window

64
Q

Что такое this?

A

Ключевое слово для доступа к текущему объекту из метода и гарантирует что функция вызвана с тем объектом в контексте, которого она работает. Значение this - это контекст вызова.

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

65
Q

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

A
str[0] (современный способ) или
str.charAt(0) или
for (let char of "Hello") {
  alert(char); // H,e,l,l,o (char — сначала "H", потом "e", потом "l" и т. д.)
}
66
Q

Как изменить регистр строки?

A

toLowerCase() и toUpperCase()

67
Q

Как найти подстроку строки?

A

str. indexOf(‘Widget’, 2) - ищет начиная с позиции 2, и возвращает позицию, на которой располагается совпадение, либо -1 при отсутствии совпадений.
str. lastIndexOf(‘Widget’, -2) - аналогично с конца
str. includes(“Bye”, 2) - вернет true или false
str. startsWith и str.endsWith проверяют, соответственно, начинается ли и заканчивается ли строка определённой строкой:

68
Q

Как получить подстроку?

A

str.slice(0, 5) - возвращает часть строки от start до (не включая) end

69
Q

Как убрать пробелы в начале и конце строки?

A

str.trim();

70
Q

Как узнать целевой элемент?

A
function clickFunc(event) {
    console.log(event.target)
}
71
Q

Для чего используется оператор “!!”?

A

Оператор “!!” (двойное отрицание) приводит значение справа от него к логическому значению

72
Q

Что такое функции высшего порядка (Higher Order Functions)?

A

это функция, возвращающая другую функцию или принимающая другую функцию в качестве аргумента

73
Q

Как работает length у массива?

A

это не количество элементов массива, а наибольший цифровой индекс плюс один

fruits[123] = “Яблоко”;
fruits.length будет 124

Таким образом, самый простой способ очистить массив – это arr.length = 0;

74
Q

Как удалить элемент массива?

A

arr.splice(index[, deleteCount, elem1, …, elemN])
Он начинает с позиции index, удаляет deleteCount элементов и вставляет elem1, …, elemN на их место. Возвращает массив из удалённых элементов.

75
Q

Как получить подмассив?

A

arr.slice([start], [end])
Он возвращает новый массив, в который копирует элементы, начиная с индекса start и до end (не включая end). Оба индекса start и end могут быть отрицательными. В таком случае отсчёт будет осуществляться с конца массива.

76
Q

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

A

arr.indexOf(item, from) или arr.lastIndexOf(item, from) и возвращает первое вхождение

77
Q

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

A

arr.includes(item, from)

78
Q

Как нам найти элемент с определённым условием в массиве?

A
let item = items.find(function(item, index, array) {
  // если true - возвращается текущий элемент и перебор прерывается
  // если все итерации оказались ложными, возвращается undefined
});

yellowFruit = fruits.find((fruit) => fruit.color === “Yellow”);

В отличии от for ..in не проходит по свойствам прототипа

79
Q

Как отсортировать массив?

A
Вызов arr.sort(fn) сортирует массив на месте, меняя в нём порядок элементов, по-умолчанию строки
fn compare(a, b) {
  if (a > b) return 1; // если первое значение больше второго
  if (a == b) return 0; // если равны
  if (a < b) return -1; // если первое значение меньше второго
}
80
Q

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

A

arr.reverse();

81
Q

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

A

arr.join(delim);

82
Q

Как сохранить значение this?

A

1) const that = this

2) стрелочная копирует this из внешнего окружения

83
Q

Для чего нужен bind?

A

Bind возвращает новую функцию, значением this которой является объект, указанный в качестве первого параметра. В отличие от bind, call и apply сразу же вызывают функцию.

84
Q

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

A

isFinite(var) и сначала преобразует var в число

85
Q

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

A

Array.from(obj[, mapFn, thisArg])

86
Q

Как получить массив ключей и т.д. из объекта?

A

Object.keys(obj) – возвращает массив ключей.
Object.values(obj) – возвращает массив значений.
Object.entries(obj) – возвращает массив пар [ключ, значение].

87
Q

Как переименовать переменную при экспорте?

A
const foo = ...;
export { foo as bar };
88
Q

Как создать promise?

A

Promise инициализируется с помощью new Promise(fn), и ему следует передавать функцию. Функция, которая передается в обещание, имеет параметры для разрешения (resolve) и отклонения (reject). Функции resolve и reject обрабатывают, соответственно, успех и неудачу операции. Пример:

// Инициализация Promise
const promise = new Promise((resolve, reject) => {})
89
Q

Как обработать значение promise?

A
function getUsers(onSuccess) {
  return new Promise((resolve, reject) => {
    ...
  })
}
getUsers(false)
  .then(response => {
    console.log(response)
  })
  .catch(error => {
    console.error(error)
  })
90
Q

Отличие примитивных типов?

A

Одним из фундаментальных отличий объектов от примитивных типов данных является то, что они хранятся и копируются «по ссылке».

91
Q

Что такое глубокое копирование объекта?

A

Получение копии сложного объекта без ссылки на исходный

92
Q

Что такое иммутабельность?

A

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

93
Q

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

A
let newObj = {...oldObj}
или
let newObj = Object.assign({}, oldObj)
94
Q

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

A

let newObj = JSON.parse(JSON.stringify(oldObj))

95
Q

Что такое ECMAScript?

A

Это стандарт, описывающий устройство языка и его поведение

96
Q

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

A
// Так будет происходить поиск файла lodash.js в текущей директории
import _ from "./lodash";
// Так импортируется код из пакета (т.е. ищет в node_modules)
import _ from "lodash";
97
Q

Что такое ООП?

A

Методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
Подход в программировании объединяющий данные и код по их обработке в одном объекте

98
Q

Что такое конструктор?

A

Это функция, которая создает объекты, давая им набор заранее определенных свойств и методов

99
Q

Что такое класс?

A

Описание будущих объектов

100
Q

Что такое наследование?

A

Создание нового класса на основе уже существующего

101
Q

Что такое инкапсуляция?

A

Ограничение доступ к составляющим объекта, делая их приватными

102
Q

Что такое полиморфизм?

A

Возможность класса-потомка менять реализацию класса-родителя сохраняя при этом его интерфейс

103
Q

Что такое объект?

A

Структура данных, обладающая определённым состоянием и поведением, имеющая определённые свойства и операции над ними (методы)

104
Q

Что такое класс?

A

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

105
Q
const a = {};
return a ? true : false
A

Oбъект всегда true

106
Q

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

A

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

107
Q

Особенность var в глобальном scope?

A

Становиться свойством window.

108
Q

Отличие call и apply?

A

Сходство заключается в том, что и .call, и .apply используются для вызова функций, а также первый параметр будет использоваться как значение this внутри функции. А разница в том, что .call в качестве следующих аргументов принимает аргументы, разделенные запятыми, в то время как .apply в качестве следующих аргументов принимает массив аргументов.

109
Q

Что такое оператор запятая?

A

Оператор запятая выполняет каждый из его операндов (слева направо) и возвращает значение последнего операнда
let x = 0;
console.log(x += 1, x) -> 1

110
Q

Для чего нужен new?

A

Ключевое слово «new» используется в функциях-конструкторах для создания нового объекта (нового экземпляра класса).

Допустим, у нас есть такой код:
 function Employee(name, position, yearHired){
     this.name = name
     this.position = position
     this.yearHired = yearHired
 }

const emp = new Employee(‘Marko Polo’, ‘Software Development’, 2017)

Ключевое слово «new» делает 4 вещи:

  1. Создает пустой объект.
  2. Привязывает к нему значение this.
  3. Функция наследует от functionName.prototype.
  4. Возвращает значение this, если не указано иное.
111
Q

Что такое объект?

A

Это коллекция данных.

112
Q

null == undefined

A

true

113
Q

Что такое оператор?

A

Это элемент языка, задающий полное описание действия, которое необходимо выполнить.

114
Q

Что будет, если сложить массивы?

A

Ведут себя как строки

115
Q

Что такое прототип объекта?

A

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

116
Q

Как происходит hoisting?

A

Интерпретатор проходит по коду два раза

117
Q

Для чего нужен метод constructor()?

A

Для инициализации начальных значений

118
Q

Для чего нужен метод super()?

A

Для вызова конструктора родительского класса при наследовании

119
Q

В чем преимущества CSS-in-JS?

A

1) вся стилизация описана в отдельной сущностию. стили применяются или не применяются в зависимости от значений пропов, и эта зависимость описана при помощи JavaScript. Основной код компонента (функция Button) остаётся максимально простым.
2) генерация уникальных классов
3) подключение только необходимых стилей
4) позволяет хранить стили рядом с основным кодом компонента в одном файле jsx