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) - получение символа по коду.
Зачем нужен массив, если есть объект.
Польза от массива появляется тогда, когда нам необходимо хранить упорядоченные коллекции.
Какие типы элементов могут храниться в массиве ?
Новый способ получить последний элемент массива.
В массиве могут храниться элементы любого типа.
Для получения последнего элемента массива был введен новый и удобный метод at.
fruits.at(-1);
Что такое массив относительно объекта ?
Массив - это особый подвид объектов. Квадратные скобки, используемые для того, чтобы получить доступ к свойству - это по сути обычный синтаксис доступа по ключу.
Массивы расширяют объекты, так как предусматривают специальные методы для работы с упорядоченными коллекциями данных, а так же свойство length.
Метод splice.
Метод, который лучше slice. Работает с массивами.
Позволяет удалять и добавлять элементы.
А также извлекать удаленные элементы.
Symbol.isConcatSpreadable: true
Данное свойство применяется к массивоподобным объектам, для того, чтобы при использовании метода concat,объект можно было обработать как массив.
const obj = {
0: ‘Nastya’,
1: 12,
[Symbol.isConcatSpreadable]: true,
length: 2,
};
Зачем нужен Array.isArray(value)
Массивы не образуют отдельный тип языка. Они основаны на объектах.
Поэтому typeof не может отличить простой объект от массива.
Поэтому существует такой метод, который позволяет проверить является ли значение массивом.