javascript Flashcards
(43 cards)
Какие типы данных присутствуют в JavaScript?
Существует 8 типов данных. 7 примитивных и 1 сложный тип данных. Примитивные типы: number, string, boolean, symbol, bigInt, null, undefined. Сложный тип - object. Он используется для коллекций данных и для объявления более сложных сущностей. Также он передается по ссылке, а простые типы данных по значению
Что такое NaN?
Глобальное свойство NaN является значением, представляющим не-число (Not-A-Number). Его тип данных number. NaN не равен самому себе. Проверку на NaN можно сделать с помощью Number.isNaN(значение)
В чем разница между null и undefined?
undefined (неопределенный) представляет собой значение по умолчанию:
1 - переменной, которая обьявлена без инициализации;
2 - функции, которая ничего не возвращает явно;
3 - несуществующего свойства объекта.
null - это значение «отсутствия значения». Присваивается переменной явно.
Чем отличается строгое и не строгое равенство (=== и ==)?
Строгое сравнивает значения по типу данных и значению
Не строгое приводит значения к одному типу а потом эти значения сравнивает.
Почему результатом сравнения двух похожих объектов является false?
Потому что объекты - это ссылочные типы данных. 2 одинаковы с виду объекта имеют разные ссылки, и поэтому операция сравнения будет возвращать false.
Как проверить 2 объекта на идентичность?
1 - использовать JSON.stringify для приведения объектов в строку и сравнить их уже как 2 строки. Такой подход имеет ограничения. Если в объекте будут методы или symbol - JSON.stringify не сможет конвертировать их в строку.
2 - написать или использовать из библиотеки функцию deepEqual которая будет проходить циклом по ключам двух объектов и будет проверять значение этих ключей. Функция должна работать рекурсивно.
Как сделать копию объекта?
Существует понятие глубокого и поверхносного копирования. Глубокое - это копирование объекта и все его уровней вложенности. Поверхносное - это коприрование только первого уровня вложенности, а для остального копируется ссылка.
Способы поверхностого копирования:
1 - использовать spread оператор (…)
2 - использовать Object.assign()
Способы глубокого копирования:
1 - использовать JSON.stringify - JSON.parse для конвертирования объектва в строку и потом обратно. Имеет ограничения по копированию методов и symbols
2 - написать или использовать из библиотеки функцию deepClone которая будет рекурсивно проходить по ключам объекта и копировать их в новый объект
Чем отличаются переменные var, let и const?
“var - переменную можно объявить после инициализации, можно изменять, имеет функциональную область видимости, имеет hoisting. Сейчас почти не используют при написании нового кода
let - переменную можно инициализировать после обьявления, можно изменять, имеет блочную область видимости, не имеет hoisting
conts - переменную обязательно нужно инициализировать во-время объявления, нельзя изменять, имеет блочную область видимости, не имеет hoisting
Как узнать является ли объект массивом?
Для этого можно использовать метод Array.isArray().
Какие перебирающие методы массивов вы знаете?
Есть следущие методы:
- forEach – для перебора массива.
- filter – для фильтрации массива.
- every – для проверки массива.
- map – для трансформации массива в массив.
- reduce/reduceRight – для прохода по массиву с вычислением значения.
- sort - сортирует массив
- find/findLast/some/findIndex/findLastIndex
Как объединить массивы?
1 - Можно использовать метод concat()
2 - Можно использоваться оператором spread и распылить эти массив в 1 один общий массив
Как узнать находится ли элемент в массиве?
1 - Использовать метод includes, который возвращает true если элемент находиться в массиве
2 - Использовать метод indexOf/lastIndexOf который возвращает индекс найденного элемента в массиве или -1 если элемента в массиве нет
Что такое поднятие (hoisting) ?
Это механизм в JavaScript, в котором переменные и объявления функций, передвигаются вверх своей области видимости перед тем, как код будет выполнен. Поднимаются переменные var и function declaration
Каким будет значение переменной var при обращении к ней до ее объявления?
undefined
Что будет если обратится к переменной let/const до её объявления?
Будет ошибка типа ReferenceError. Cannot access ‘variable’ before initialization
Що таке область видимості (Scope)?
Це частина програми, в межах якої можна отримати доступ до певних змінних.
Іншими словами, вона визначає видимість змінної.
JS має 6 типів областей видимості: глобальна, модульна, функціональна, Eval, блочна (ES6), лексична области видимості.
Чем Function Declaration отличается от Function Expression?
Function Expression создаётся, когда выполнение доходит до него, и затем уже может использоваться.
Function Declaration создается до выполнения кода scope где она была объявлена. И может быть использована во всем этом scope.
Чем стрелочная функция отличается от обычной?
1 - Стрелочная функция получает this в момент создания из родительского this. В обычной функции this устанавливается во время вызова из контеста вызова.
2 - Стрелочная функция не имеет arguments.
3 - Стрелочная функция не имеет свойства prototype.
4 - Стрелочная функция имеет короткий синтаксис не явного возврата значения.
Есть ли аналог arguments для стрелочной функции?
Можно использовать rest оператор (…) для того, чтобы собрать все аргументы с которыми вызвана функция в массив.
Что такое лексическое окружение (Lexical Environment)?
Лексическое окружение в JavaScript — это комбинация текущей области видимости и ссылки на внешнее лексическое окружение.
Внешнее лексическое окружение — это окружение з текущей областью видимости в которой функция была объявлена, и она позволяет функции обращаться к переменным и функциям, определенным в этой внешней среде.
Что является глобальным лексическим окружение?
window
Что такое замыкание (Closures)?
Замыкание - это возможность функции использовать переменные из ее лексического окружения в котором она была объявлена.
Замыкание — это комбинация функции и лексического окружения, в котором эта функция была определена. Другими словами, замыкание даёт доступ фунции к внешнему лексическому окружению. В итоге по цепочке ссылок на родительское лексическое окружения фунция имеет доступ ко всем лексическим окружениям своих предков. В JavaScript замыкания создаются каждый раз при создании функции, во время её создания.
Это способность функции во время создания запоминать ссылки на переменные функции и параметры, находящиеся в текущем лексическом окружении, а так же в лексическом окружении родительской функции и так до глобальной области видимости. Замыкание подразумевает именно внешние переменные, а не саму функцию.
or
Это способность функции запоминать окружение (значения переменных окружения) в котором она была определена.
Для чего используют замыкания?
1 - Часто для создания приватных переменных и функций (инкапсуляция).
2 - Для сохранения промежуточных параметров вызова функции (каррирование).
3 - Мемоизация функции.
Что такое IIFE?
Immediately Invoked Function Expression - это функция, которая вызывается или выполняется сразу же после создания или объявления.