Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fix few small typos in optional chaining (01-04-07)#697

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
Andrii256 wants to merge1 commit intojavascript-tutorial:master
base:master
Choose a base branch
Loading
fromAndrii256:01-04-07-optional-chaining
Open
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions1-js/04-object-basics/07-optional-chaining/article.md
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ alert( user.address && user.address.street && user.address.street.name ); // und

Логічне "І" з ланцюжком властивостей гарантує нам, що всі вони існують (якщо ж ні -- обчислення припиняється), але й це все ще не ідеал.

Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address`появляється тричі.
Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address`з'являється тричі.

Ось чому опціональний ланцюжок `?.` був доданий в мову. Щоб розв'язати цю проблему раз і назавжди!

Expand DownExpand Up@@ -120,7 +120,7 @@ alert( user?.address.street ); // undefined
Наприклад в `user?.address.street.name` конструкція `user?.` дозволяє `user` залишатись `null/undefined` (і повертати `undefined` в такому випадку), але це працює тільки для `user`. Доступ до решти властивостей здійснюється звичайним способом. Якщо ми хочемо, щоб якась з них була необов’язковою, тоді конкретно для цієї властивості нам доведеться замінити `.` на `?.`.

````warn header="Не зловживайте опціональним ланцюжком"
Нам слід використовувати `?.` тільки в тих ситуаціях коли ми припускаємо що значення може не існувати.
Нам слід використовувати `?.` тільки в тих ситуаціях коли ми припускаємо, що значення може не існувати.

Наприклад, якщо за нашою логікою об’єкт `user` точно існує, але його властивість `address` є необов’язковою, тоді нам слід використовувати конструкцію `user.address?.street`. Проте аж ніяк не `user?.address?.street`.

Expand DownExpand Up@@ -180,7 +180,7 @@ userGuest.admin?.(); // нічого (немає такого методу)
*/!*
```

В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає що ми можемо звернутись до будь-якої його властивості.
В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає, що ми можемо звернутись до будь-якої його властивості.

Вже потім `?.()` перевіряє ліву частину: якщо функція `admin` існує, то вона виконається (у випадку з `userAdmin`). Інакше (для `userGuest`) обчислення припиниться без помилок.

Expand DownExpand Up@@ -213,7 +213,7 @@ delete user?.name; // видалити user.name, якщо користувач
let user = null;

user?.name = "Іван"; // Помилка, не спрацює
// це по суті те ж саме що undefined = "John"
// це по суті те ж саме, що й undefined = "John"
```

Воно недостатньо «розумне» для цього.
Expand All@@ -231,4 +231,4 @@ user?.name = "Іван"; // Помилка, не спрацює

Ланцюжок `?.` дозволяє без виникнення помилок звертатись до вкладених властивостей.

Однак, потрібно розумно застосовувати `?.`, тільки в тих випадках де допустимо що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування.
Однак, потрібно розумно застосовувати `?.`, тільки в тих випадках де допустимо, що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування.

[8]ページ先頭

©2009-2025 Movatter.jp