JS (Part 1) Flashcards
Объекты
Обращение к несуществующему свойству объекта.
Особенность JavaScript-объектов в том, что можно получить доступ к любому свойству. Даже если свойства не существует – ошибки не будет!
В таком случае, возвращается undefined.
Объекты
Способы проверки сущеcтвования свойств объекта.
2 основных способа:
1. Сравнение с undefined (===);
2. Использовать оператор in (“key” in obj)
3. Использовать свойств о Object.hasOwn(obj, prop)
Помним, что при сравнении, есть особый случай. Если свойство существует и его значение - undefined, то логика ломается.
Объекты
Упорядоченные свойства объекта.
При переборе свойств объекта, нельзя быть увереным, что порядок будет сохранен. Поэтому если порядок важен, объект как структура данных не подходит.
Переменная и объект.
Переменная хранит не значение объекта, а ссылку. То есть адрес в памяти на это значение.
Поверхностная копия и глубокая копия объекта.
Для поверхностной копии объекта можно использовать простой цикл или встроенную функцию Object.assign(dest, [ob1, obj2, …]);
Для глубокой копии объекта можно использовать цикл с рекурсией, либо функцию из библиотеки lodash: _.cloneDeep(obj).
Общепринятое название функций объекта.
Функции объекта в языке JS принято называть методами.
Сокращенная запись метода в объекте.
user = {
sayHi() {
console.log(“Hi”);
}
};
Вместо: sayHi: function() { … };
Момент определения значения this.
Значение this определяется во время исполнения кода. Нужно просто понимать, что значение не фиксировано.
Функция-конструктор. Что это ? Что происходит при вызове ? Зачем ?
Функция-конструктор технически обычная функция, но существует два соглашения:
1. Имя функции-конструктора должно начинаться с большой буквы;
2. Функция-конструктор должна выполняться только с помощью оператора “new”.
Когда функция-конструктор вызывается, происходят следующие вещи:
1. Создается новый пустой объект, и он присваивается this;
2. Выполняется тело функции;
3. Возвращается значение this.
Основная цель конструкторов – реализовать код для многократного создания однотипных объектов.
Возврат значения из конструктора.
Обычно конструкторы не имеют оператора return. Их задача – записать все необходимое в this, и это автоматически становится результатом.
Но если return всё же есть, то применяется простое правило:
- При вызове return с объектом, вместо this вернётся объект.
- При вызове return с примитивным значением, оно проигнорируется.
Опциональная цепочка. Что это ? Варианты использования.
Опциональная цепочка ?. останавливает вычисление и возвращает undefined, если значение перед ?. не определено.
Что-то определено или существует, если оно не является null и не undefined.
Синтаксис опциональной цепочки ?. имеет три формы:
1. obj?.prop
2. obj?.[prop]
3. obj.method?.()
Какими типами могут быть ключи у объекта ?
По спецификации, в качестве ключей для свойств могут использоваться только строки или символы.
Почему вообще существуют примитивные типы, когда можно вообще все сделать объектом ?
Объекты “тяжелее” примитивов. Они нуждаются в дополнительных ресурсах для поддержания внутренней структуры.
Примитив как объект.
Есть множество действий, которые хотелось бы применять к примитивным типам. Но примитивы должны оставаться легкими и быстрыми насколько это возможно.
Тогда был придуман механизм “объект-обертка”.
Его суть в том, что примитивы остаются примитивами, но язык позволяет осуществлять доступ к методам и свойствам примитивных типов за счет того, что в момент обращения к этим свойствам JS автоматически оборачивает примитив в обертку, вызывает метод и удаляет специальный объект, возвращая обычное значение.
Методы обертки есть у каждого типа кроме null и undefined.
Проверка: ifFinite и isNan.
Infinity и NaN - это числовые значения, которые принадлежат типу number. Но они не являются обычными числами, поэтому есть функции для их проверки.
isNaN(value) - преобразует значение в число и проверяет является ли оно NaN.
Нужно помнить что === NaN не сработает, так как NaN уникально тем, что оно не равно ничему даже самому себе.
isFinite(value) - проверяет содержится ли в строке число. Вернет true всегда, если значение не infinity/-infinity или не число.
parseInt(str, base) и num.toString(base)
parseInt(str, base) преобразует строку в целое число в соответствии с указанной системой счисления;
num.toString(base) представляет число в строковом виде в указанной системе счисления base.
Функции, которые используются для округления в JS.
- Math.floor(value) - округление в меньшую сторону;
- Math.ceil(value) - округление в большую сторону;
- Math.trunc(value) - удаление дробной части без округления;
- Math.round(value) - округление до ближайшего целого;
- num.toFixed(precision) - округляет число до n знаков после запятой и возвращает строковое представление результата.
В каком формате кодируются строки в JS ? Методы работы с этим форматом.
В JS строки кодируются только в формате UTF-8.
str.codePointAt(pos) - получение кода в UTF-16.
String.fromCodePoint(code) - получение символа по коду.