Свойства объекта
Литерал и чтение через точку уже в ящике с инструментами. На настоящей форме меняется сама сумка: после выбора цвета появляется поле, при сохранении пропадает флаг черновика, а город сидит внутри адреса. Эта страница — такая повседневная работа со свойствами.
Дальше первого литерала
Страница объектов собрала сумку и прочитала поле. Здесь вы меняете, какие ключи есть: приносите имя, которого не было, отпускаете имя, которое больше не нужно, спрашиваете, на месте ли имя, входите в объект, лежащий внутри другого, и перечисляете имена, которые правда держите.
Пять ходов над свойством
📊 Добавить, убрать, проверить, вложить, перечислить
| Ход | Запись | Что получаете |
|---|---|---|
| добавить | item.color = "blue" |
новое свойство на том же объекте |
| убрать | delete item.draft |
этого ключа больше нет |
| наличие | "sku" in item |
true или false |
| вложить | user.address.city |
поле внутри другого объекта |
| перечислить | Object.keys(user) |
массив собственных ключей |
Назовёте ход — строка последует. Добавление не чеканит второй объект. Удаление не превращает значение в пустую строку. Список имён — не та же работа, что чтение одного значения.
let item = {
name: "Mug",
price: 8
};
item.color = "blue";
console.log(item.color);
Присваивание растит отсутствующий ключ
item начался только с name и price. Раз color не было, строка item.color = "blue" его создаёт. Объект по-прежнему один, теперь с тремя свойствами. Консоль печатает blue.
let item = {
name: "Mug",
price: 8,
draft: true
};
delete item.draft;
console.log("draft" in item);
delete снимает ключ
delete item.draft убирает это свойство, не весь объект. После этого "draft" in item равно false. Имя и цена остаются. Записать "" или null — другой поступок: ключ остаётся, значение новое.
let item = {
name: "Mug",
price: 8
};
console.log("name" in item);
console.log("sku" in item);
in отвечает да или нет про ключ
"name" in item равно true — это имя на объекте. "sku" in item равно false — вы его не добавляли. Отсутствующее свойство читается как undefined, и сохранённый undefined читается так же. in спрашивает про ключ, не про сидящее там значение.
let user = {
name: "Lina",
address: {
city: "Shiraz",
zip: "71345"
}
};
console.log(user.address.city);
Свойство может держать другой объект
address — не строка. Это объект с city и zip. Выражение user.address.city делает два шага: в address, затем в city. Консоль печатает Shiraz. Вложение держит части адреса вместе, вместо того чтобы распластать каждую на user.
let user = {
name: "Lina",
role: "editor"
};
let names = Object.keys(user);
console.log(names);
Object.keys отдаёт имена
Object.keys(user) возвращает массив собственных ключей — здесь ["name", "role"]. Значение вы по-прежнему читаете точкой или скобками. Список нужен, когда не хочется вписывать каждое имя заранее. Сам по себе значения он не печатает.
Сначала выберите ход, потом печатайте
Новое поле? Присвойте. Ключ должен исчезнуть? delete. Да или нет? in. Город внутри адреса? Вложите и идите по точкам. Только имена? Object.keys. Функции, лежащие на объекте, — методы — тема следующего урока.
После добавления положите вложенный город на страницу
Начните с пользователя и адреса, добавьте plan в скрипте и поставьте город в абзац.
<!DOCTYPE html>
<html>
<head>
<title>object-properties — page</title>
</head>
<body>
<p id="place">…</p>
<script>
let user = {
name: "Lina",
address: { city: "Shiraz" }
};
user.plan = "yearly";
let box = document.getElementById("place");
box.textContent = user.address.city + " — " + user.plan;
</script>
</body>
</html>
Абзац показывает Shiraz — yearly. Город уже был вложен; plan пришёл после литерала. Поменяйте только city или plan, обновите страницу и прочитайте новую строку. Дальше: методы объекта — функции, которые живут на объекте.
Шаги практики
- Соберите объект с двумя свойствами, добавьте третье присваиванием и выведите его.
- Поставьте
draft, уберите черезdeleteи проверьте"draft" in item. - На объекте, где есть только
name, выведите"name" in itemи"sku" in item. - Вложите
addressсcityи выведитеuser.address.city. - Выведите
Object.keysдля объекта с двумя ключами и прочитайте массив. - В HTML-демо поменяйте только
cityилиplan, обновите и прочитайте абзац.
Частые промахи
- Думать, что
item.color = "blue"чеканит совсем новый объект — растёт тот же - Писать
item.draft = null, когда имелось в видуdelete item.draft— ключ остаётся - Считать отсутствующий ключ и сохранённый
undefinedодним вопросом — для ключа беритеin - Писать
user.city, когдаcityживёт наuser.address - Ждать, что
Object.keysвернёт значения - Искать методы и
thisна этой странице — это следующий урок
Кратко
- Присваивание отсутствующему ключу добавляет это свойство
deleteснимает ключ; остальное у объекта остаётся"key" in objговорит, есть ли ключ- Свойство может держать другой объект; лишние точки идут внутрь
Object.keysвозвращает имена, не значения- Вложенное поле и только что добавленное могут делить одну строку на странице
- Дальше: методы объекта — функции, хранящиеся на объекте
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху