All JavaScript Flashcards

1
Q

Какие типы данных есть в JavaScript?

A

Number
String
Boolean

Null
Undefined

Object
Symbol

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

Как в JavaScript хранятся числа? Какие ошибки могут возникать при их использовании?

A

Числа хранятся в 64 битном формате, с плавающей точкой двойной точности.

Ошибки могут возникать при записи дробей. Так как не все дроби удобно представимы в двоичной системе, у них может возникать мантисса (её можно отбрасывать при помощи округления).

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

Как кодируются строки? Что такое суррогатные пары и как реализуются диакритические знаки?

A

Используется кодировка UTF-16 – символы кодируются 16-битными словами. Этого хватает для большинства символов, остальные же кодируются двумя словами - такие символы называют суррогатными парами.

Диакритические знаки можно реализовать если добавить коды символов (верхняя точка, нижний апостроф, …) после самого символа.

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

Чем отличаются null и undefined?

A

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

Null - это ключевое слово, которым пользователь создаёт объект заглушку, чтобы показать отсутствие требуемого результата выполнения части программы.

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

Чем отличаются function declaration и function expression?

A

Function declaration всегда создаёт именованную функцию. Такая функция всплывает - она может быть использована до объявления.

Function expression создаёт анонимную функцию, которая может быть немедленно присвоена в переменную, вызвана или передана в другую функцию. Эти функции создаются только когда исполнение кода доходит до них.

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

Что будет записано в переменную ‘с’?

let a = 1;
let b = 2;

let c = 3 - (a = b + 1);

A

Так как оператор присваивания возвращает результат присваивания, с=3-(2+1)=0

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

Чему равен this у функции?

A

Если функция вызывается из объекта, то this ссылается на этот объект.

Если функция не принадлежит объекту, то this будет undefined в строгом режиме или будет ссылаться на глобальный объект (window в браузере) в обычном режиме.

Также this может быть потерян если мы передадим метод объекта в другую функцию вне объекта. Также this может быть явно указан в методах call и apply.

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

Как объекты приводятся к примитивам?

A

Для определения, к какому типу нужно приводить объект, javascript использует хинты ‘string’, ‘number’ и ‘default’.

Сначала вызывается objSymbol.toPrimitive, если он не существует и хинт - строка, то вызывается сначала obj.toString() а затем obj.valueOf(). Если хинт - число или дефолтный, интерпретатор пытается вызвать эти методы в обратном порядке.

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

Как можно осуществить проверку на undefined?

A

if( x === undefined) {}

if( typeof x === ‘undefined’ ) {}
Последний метод позволяет избежать ошибки если переменная х не была объявлена. Но на практике это встречается редко.

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

Деструктурирующее присваивание.
Сработает ли этот код?

let width, height;

{width, height} = {width: 200, height: 200};

A

Нет, потому что при деструктурирующем присваивании js решит, что он вошёл в блок кода и не увидит объявленных ранее переменных width и height.

Чтобы указать js на то, что мы не в блоке кода, можно использовать скобки:

({width, height} = {width: 200, height: 200});

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

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

A

Лексическое окружение существует в виде объекта Lexical Environment, который состоит из двух частей:

  1. EnvironmentRecord - хранит в себе переменные, значение this, и другие свойства.
  2. Ссылка на внешнее лексическое окружение.

Переменные - это просто свойства EnvironmentRecord.

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

Как функции в JavaScript узнают о внешнем лексическом окружении?

A

При рождении, каждая функция получает внутреннее свойство [[Environment]], которое ссылается на объект внешнего лексического окружения.

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

Какова главная особенность лексического окружения в циклах?

A

Каждую итерацию создаётся новое лексическое окружение.

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

Сделайте набор «готовых к употреблению» фильтров:

  1. inBetween(a, b) – между a и b (включительно).
  2. inArray([…]) – находится в данном массиве.

Они должны использоваться таким образом:

  1. arr.filter(inBetween(3,6)) – выбирает только значения между 3 и 6 (включительно).
  2. arr.filter(inArray([1,2,3])) – выбирает только элементы, совпадающие с одним из элементов массива
A
function inBetween(a, b) {
  return function(x) {
    return x >= a && x <= b;
  };
}
function inArray(arr) {
  return function(x) {
    return arr.includes(x);
  };
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Какие особенности у ключевого слова var?

A
  1. Область видимости var ограничена только функциями.
  2. Переменные var инициализируются сразу при начале выполнения кода/функции.
  3. Переменную с var можно объявить несколько раз.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Зачем нужны методы функций call/apply? Чем они отличаются?

A

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

Метод call принимает аргументы функции через запятую, метод apply принимает массив аргументов.

17
Q

Из каких полей состоит дескриптор свойства объекта?

A

Value
Writable
Enumerable
Configurable

18
Q

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

A

Прототип будет доступен через свойство F.prototype функции конструктора.

19
Q

На что по умолчанию ссылается свойство prototype у функций?

A

Каждая функция по умолчанию через prototype ссылается на объект с одним свойством - constructor - которое ссылается обратно на эту функцию.

20
Q

Чем промисы лучше или удобнее коллбэков?

A
  • Отсутствует вложенность благодаря использованию цепочек (callback hell)
  • Более удобный синтаксис обработки ошибок
  • Удобно подписывать сразу несколько потребителей (колбэк может быть только один)
21
Q

Когда колбэк может быть предпочительнее промиса?

A

Когда колбэк может быть переиспользован или вызван несколько раз. Промис вызывается единожды.

22
Q

What is the difference between slice and splice?

A

Slice

  1. Doesn’t modify the original array(immutable)
  2. Returns the subset of original array

Splice

  1. Modifies the original array(mutable) - removes returned arguments and appends all its argumens starting from third
  2. Returns the deleted elements as array - splice(1, 3) will return 3 elements starting from 1
23
Q

How do you compare Object and Map?

A

Objects have been used as Maps historically. But there are important differences:

  1. The keys of an Object are Strings and Symbols, whereas they can be any value for a Map, including functions, objects, and any primitive.
  2. The keys in Map are ordered while keys added to Object are not. Thus, when iterating over it, a Map object returns keys in order of insertion.
  3. You can get the size of a Map easily with the size property, while the number of properties in an Object must be determined manually.
  4. A Map is an iterable and can thus be directly iterated, whereas iterating over an Object requires obtaining its keys in some fashion and iterating over them.
  5. An Object has a prototype, so there are default keys in the map that could collide with your keys if you’re not careful. As of ES5 this can be bypassed by using map = Object.create(null), but this is seldom done.
  6. A Map may perform better in scenarios involving frequent addition and removal of key pairs.