Модуль 9 · Урок 34
Objects, property access і data modeling
Raw object ще не є trusted domain model. Визначте schema, allowlist fields, нормалізуйте types у новий object і перевірте required invariants; object spread та destructuring зручні, але створюють лише shallow copy.
Модель із явними полями
function normalizeBook(raw) {
if (!raw || typeof raw !== 'object') return null;
return {
id: String(raw.id ?? '').trim(),
title: String(raw.title ?? '').trim(),
pages: Number(raw.pages),
available: raw.available === true,
};
}Dot access зручний для known identifier; bracket потрібний для dynamic key. Dynamic input не має необмежено читати/писати arbitrary property — застосуйте allowlist. Object.hasOwn(object, key) перевіряє own property без залежності від prototype.
Reference, destructuring і spread
| Операція | Результат | Межа |
|---|---|---|
const b = a | Той самий reference | Mutation видно через обидва bindings |
{...a} | Новий top-level object | Nested objects усе ще shared |
| Destructuring | Bindings із properties | Default лише для undefined |
| Projection | Allowlisted output | Не переносить unknown fields |
Не використовуйте JSON stringify/parse як універсальний clone: губляться values/types і це не замінює schema та validation.
Практика
Заповніть object-model worksheet і reference/mutation matrix. Acceptance: raw input не змінений, unknown fields не потрапили в trusted model, invalid object дає documented controlled result.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.