javascript Flashcards
Какие типы данных присутствуют в 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.