diff --git a/1-js/04-object-basics/07-optional-chaining/article.md b/1-js/04-object-basics/07-optional-chaining/article.md
index 4f6b72cb2..646f30b07 100644
--- a/1-js/04-object-basics/07-optional-chaining/article.md
+++ b/1-js/04-object-basics/07-optional-chaining/article.md
@@ -76,7 +76,7 @@ alert( user.address && user.address.street && user.address.street.name ); // und
 
 Логічне "І" з ланцюжком властивостей гарантує нам, що всі вони існують (якщо ж ні -- обчислення припиняється), але й це все ще не ідеал.
 
-Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address` появляється тричі. 
+Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address` з'являється тричі. 
 
 Ось чому опціональний ланцюжок `?.` був доданий в мову. Щоб розв'язати цю проблему раз і назавжди!
 
@@ -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`.
 
@@ -180,7 +180,7 @@ userGuest.admin?.(); // нічого (немає такого методу)
 */!*
 ```
 
-В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає що ми можемо звернутись до будь-якої його властивості.
+В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає, що ми можемо звернутись до будь-якої його властивості.
 
 Вже потім `?.()` перевіряє ліву частину: якщо функція `admin` існує, то вона виконається (у випадку з `userAdmin`). Інакше (для `userGuest`) обчислення припиниться без помилок.
 
@@ -213,7 +213,7 @@ delete user?.name; // видалити user.name, якщо користувач
 let user = null;
 
 user?.name = "Іван"; // Помилка, не спрацює
-// це по суті те ж саме що undefined = "John"
+// це по суті те ж саме, що й undefined = "John"
 ```
 
 Воно недостатньо «розумне» для цього.
@@ -231,4 +231,4 @@ user?.name = "Іван"; // Помилка, не спрацює
 
 Ланцюжок `?.` дозволяє без виникнення помилок звертатись до вкладених властивостей.
 
-Однак, потрібно розумно застосовувати `?.`, тільки в тих випадках де допустимо що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування.
+Однак, потрібно розумно застосовувати `?.`, тільки в тих випадках де допустимо, що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування.