JS Basics Flashcards
Brush up your knowledge of the basic concepts
Какие типы данных есть в JavaScript?
Number
BigInt
String
Boolean
Null
Undefined
Object
Symbol
Как в JavaScript хранятся числа? Какие ошибки могут возникать при их использовании?
Числа хранятся в 64 битном формате, с плавающей точкой двойной точности.
Ошибки могут возникать при записи дробей. Так как не все дроби удобно представимы в двоичной системе, у них может возникать мантисса (её можно отбрасывать при помощи округления).
Чем отличается null от undefined?
Undefined - это внутренняя переменная языка, которая показывает что мы пытаемся получить несуществующий объект.
Null - это ключевое слово, которым пользователь создаёт заглушку, чтобы показать отсутствие требуемого результата выполнения части программы.
Чем отличаются function declaration и function expression?
Function declaration всегда создаёт именованную функцию. Такая функция всплывает - она может быть использована до объявления.
Function expression создаёт анонимную функцию, которая может быть немедленно присвоена в переменную, вызвана или передана в другую функцию. Эти функции создаются только когда исполнение кода доходит до них.
Чему равен this у функции?
Если функция вызывается из объекта, то this ссылается на этот объект.
Если функция не принадлежит объекту, то this будет undefined в строгом режиме или будет ссылаться на глобальный объект (window в браузере) в обычном режиме.
Также this может быть потерян если мы передадим метод объекта в другую функцию вне объекта. Также this может быть явно указан в методах call и apply.
К какому типу данных относится NaN? Infinite? Где они определены?
Оба - числовой тип. NaN показывает число, которое нельзя представить в виде числа. Infinite нужен для представления результатов вычислений результатом которых является бесконесность.
И NaN, и Infinity - это неперезаписываемые переменные глобального контекста.
Что выведет typeof null?
Object
Что выведет typeof []? Почему?
Object
Массив - это объект со специальными свойствами (length, Symbol.Iterator) и прототипом Array в котором есть специальные методы массивов.
В каких случаях происходит неявное преобразование к числу?
- Операторы сравнения (>, =, <=);
- Побитовые операторы (|, &, ^, ~);
- Унарный +;
- Арифметических операции (+, -, *, /), кроме “+” где хоть один операнд - строка.
- Нестрогое равенство “==” (кроме случаев, когда оба операнда - строки, когда один из операндов null или undefined);
Как строка преобразуется к числу?
- Убираются пробелы, переносы строки и табы
- Если результат - пустая строка -> 0
- Если результат непустой, то результат будет или число, или NaN если число нельзя считать
Как Null, Undefined и Symbol преобразуются к числу?
null -> 0
undefined -> NaN
Symbol -> TypeError
Чему равен (==) NaN?
Ничему, даже самому себе
Чему равен (==) undefined?
undefined, null
Чему равен (==) null?
null, undefined
В каких случаях происходит неявное преобразование к строке?
- Бинарный “+”, когда один из операндов - строка
- В случаях, когда по контексту нужно преобразование к строке: console.log(), alert(), и тд. ( неявный вызов toString() )
Как символьный тип приводится к строке?
Приводится только явно:
String(Symbol(‘my symbol’)) // ‘Symbol(my symbol)’
Неявное приведение вызывает ошибку:
‘ ‘ + Symbol(‘my symbol’) // TypeError is thrown
В каких случаях происходит неявное преобразование к булевому типу данных?
- Логический контекст (в условии оператора if).
2. С логическими операторами (||, &&, !)
Какие значения в JS приводятся к false? (falsy values)
- Boolean(‘’) // false
- Boolean(0) // false
- Boolean(-0) // false
- Boolean(NaN) // false
- Boolean(null) // false
- Boolean(undefined) // false
Как объекты приводятся к примитивам?
Приведение к Boolean - всегда true.
Для определения, к какому типу нужно приводить объект, javascript использует хинты ‘string’, ‘number’ и ‘default’.
Сначала вызывается objSymbol.toPrimitive, если он не существует и хинт - строка, то вызывается сначала obj.toString() а затем, если вызов ничего не вернул, вызывается obj.valueOf(). Если хинт - число или дефолтный, интерпретатор пытается вызвать эти методы в обратном порядке.
Как можно осуществить проверку на undefined?
if( x === undefined) {}
if( typeof x === ‘undefined’ ) {}
Последний метод не выбрасывает исключение если переменная х не была объявлена. Но на практике это используется редко.