update js
This commit is contained in:
@@ -6,17 +6,14 @@ sidebar_position: 1
|
||||
Объекты – это ассоциативные массивы с рядом дополнительных возможностей.
|
||||
|
||||
Они хранят свойства (пары ключ-значение), где:
|
||||
|
||||
- Ключи свойств должны быть строками или символами (обычно строками).
|
||||
- Значения могут быть любого типа.
|
||||
|
||||
Чтобы получить доступ к свойству, мы можем использовать:
|
||||
|
||||
- Запись через точку: obj.property.
|
||||
- Квадратные скобки obj["property"]. Квадратные скобки позволяют взять ключ из переменной, например, obj[varWithKey].
|
||||
|
||||
Дополнительные операторы:
|
||||
|
||||
- Удаление свойства: delete obj.prop.
|
||||
- Проверка существования свойства: "key" in obj.
|
||||
- Перебор свойств объекта: цикл for for (let key in obj).
|
||||
@@ -118,3 +115,5 @@ for (let key in user) {
|
||||
```
|
||||
### Упорядочение свойств объекта
|
||||
Cвойства упорядочены особым образом: свойства с целочисленными ключами сортируются по возрастанию, остальные располагаются в порядке создания.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/object](https://learn.javascript.ru/object)**
|
||||
@@ -74,3 +74,5 @@ let clone = JSON.parse(JSON.stringify(obj))
|
||||
|
||||
#### Метод structuredClone (deep)
|
||||
Мы можем использовать глобальный метод ***structuredClone()***, который позволяет сделать полную копию объекта. К сожалению он поддерживается только современными браузерами.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/object-copy](https://learn.javascript.ru/object-copy)**
|
||||
@@ -37,4 +37,6 @@ let user = {
|
||||
1. Методы могут ссылаться на объект через `this`.
|
||||
2. Значение `this` определяется во время исполнения кода.
|
||||
- При объявлении любой функции в ней можно использовать `this`, но этот `this` не имеет значения до тех пор, пока функция не будет вызвана.
|
||||
- Когда функция вызывается синтаксисом «метода» – ***object.method()***, значением `this` во время вызова является `object`.
|
||||
- Когда функция вызывается синтаксисом «метода» – ***object.method()***, значением `this` во время вызова является `object`.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/object-methods](https://learn.javascript.ru/object-methods)**
|
||||
@@ -31,4 +31,6 @@ function User(name) {
|
||||
```
|
||||
Итого:
|
||||
- Функции-конструкторы или просто конструкторы, являются обычными функциями, но существует общепринятое соглашение именовать их с заглавной буквы.
|
||||
- Функции-конструкторы следует вызывать только с помощью `new`. Такой вызов подразумевает создание пустого `this` в начале и возврат заполненного в конце.
|
||||
- Функции-конструкторы следует вызывать только с помощью `new`. Такой вызов подразумевает создание пустого `this` в начале и возврат заполненного в конце.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/constructor-new](https://learn.javascript.ru/constructor-new)**
|
||||
@@ -33,4 +33,6 @@ user?.name = "John"; // Ошибка, не работает
|
||||
|
||||
Как мы видим, все они просты и понятны в использовании. ?. проверяет левую часть на `null/undefined` и позволяет продолжить вычисление, если это не так.
|
||||
|
||||
Цепочка ?. позволяет безопасно получать доступ к вложенным свойствам.
|
||||
Цепочка ?. позволяет безопасно получать доступ к вложенным свойствам.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/optional-chaining](https://learn.javascript.ru/optional-chaining)**
|
||||
@@ -41,4 +41,6 @@ alert(id1 == id2); // false
|
||||
2. Существует множество системных символов, используемых внутри JavaScript, доступных как Symbol.*. Мы можем
|
||||
использовать их, чтобы изменять встроенное поведение ряда объектов. Например, в дальнейших главах мы будем
|
||||
использовать Symbol.iterator для итераторов, Symbol.toPrimitive для настройки преобразования объектов в примитивы и
|
||||
так далее.
|
||||
так далее.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/symbol](https://learn.javascript.ru/symbol)**
|
||||
@@ -7,7 +7,6 @@ sidebar_position: 7
|
||||
Преобразование объекта в примитив вызывается автоматически многими встроенными функциями и операторами, которые ожидают примитив в качестве значения.
|
||||
|
||||
Существует всего 3 типа (хинта) для этого:
|
||||
|
||||
- "string" (для alert и других операций, которым нужна строка)
|
||||
- "number" (для математических операций)
|
||||
- "default" (для некоторых других операторов, обычно объекты реализуют его как "number")
|
||||
@@ -15,7 +14,6 @@ sidebar_position: 7
|
||||
Спецификация явно описывает для каждого оператора, какой ему следует использовать хинт.
|
||||
|
||||
Алгоритм преобразования таков:
|
||||
|
||||
1. Сначала вызывается метод `obj[Symbol.toPrimitive](hint)`, если он существует,
|
||||
2. В случае, если хинт равен "string"
|
||||
- происходит попытка вызвать `obj.toString()` и `obj.valueOf()`, смотря что есть.
|
||||
@@ -24,4 +22,6 @@ sidebar_position: 7
|
||||
|
||||
Все эти методы должны возвращать примитив (если определены).
|
||||
|
||||
На практике часто бывает достаточно реализовать только `obj.toString()` в качестве универсального метода для преобразований к строке, который должен возвращать удобочитаемое представление объекта для целей логирования или отладки.
|
||||
На практике часто бывает достаточно реализовать только `obj.toString()` в качестве универсального метода для преобразований к строке, который должен возвращать удобочитаемое представление объекта для целей логирования или отладки.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/object-toprimitive](https://learn.javascript.ru/object-toprimitive)**
|
||||
@@ -75,3 +75,5 @@ user.name = ""; // Имя слишком короткое...
|
||||
|
||||
## Использование для совместимости
|
||||
У аксессоров есть интересная область применения – они позволяют в любой момент взять «обычное» свойство и изменить его поведение, поменяв на геттер и сеттер.
|
||||
|
||||
🚀 **Источник: [https://learn.javascript.ru/property-accessors](https://learn.javascript.ru/property-accessors)**
|
||||
Reference in New Issue
Block a user