Модуль 9 · Урок 34

Objects, property access і data modeling

Raw object ще не є trusted domain model. Визначте schema, allowlist fields, нормалізуйте types у новий object і перевірте required invariants; object spread та destructuring зручні, але створюють лише shallow copy.

Object literalDot / bracketShallow copyTrusted model

Модель із явними полями

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Той самий referenceMutation видно через обидва bindings
{...a}Новий top-level objectNested objects усе ще shared
DestructuringBindings із propertiesDefault лише для undefined
ProjectionAllowlisted 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.

Офіційні джерела

Практична перевірка · урок 34 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Коли dot access доречний?
2. Коли потрібен bracket access?
3. Що перевіряє Object.hasOwn(object,key)?