diff --git a/1-js/05-data-types/01-primitives-methods/1-string-new-property/solution.md b/1-js/05-data-types/01-primitives-methods/1-string-new-property/solution.md index 732dfefa5..ad4eac6a9 100644 --- a/1-js/05-data-types/01-primitives-methods/1-string-new-property/solution.md +++ b/1-js/05-data-types/01-primitives-methods/1-string-new-property/solution.md @@ -9,23 +9,18 @@ str.test = 5; // (*) alert(str.test); ``` -Ви можете отримати два результати: -1. `undefined` -2. помилку. +В залежності від того, втановлений у вас `use strict` чи ні, результати будуть наступними: +1. `undefined` (без строгого режиму) +2. Помилка (строгий режим) -Чому? Давайте повторимо те, що відбувається в рядку `(*)`: +Чому? Давайте повторимо те, що відбувається в рядку, який позначено `(*)`: 1. Коли ми намагаємося отримати доступ до `str`, створюється "об'єкт обгортка". -2. Операція з властивістю здійснюється в ній. Отже, об'єкт отримує властивість `test`. -3. Операція закінчується, і "об'єкт обгортка" зникає. - -Отже, на останньому рядку `str` не має властивості. Для кожної операції створюється новий об'єкт обгортка. - -Деякі браузери можуть вирішити додатково обмежити програміста і взагалі заборонити присвоювати властивості примітивам. Тому на практиці ми можемо бачити помилки в рядку `(*)`. Але це трохи відрізняється від специфікації. +2. В строгому режимі, спроба запису викличе помилку. +3. В іншому випадку операція здійсниться і об'єкт отримає властивість `test`, але після цього "об'єкт обгортка" зникне. +Отже, якщо код виконується не в строгому режимі, на останньому рядку `str` не матиме властивості `test`. **Цей приклад чітко показує, що примітиви не є об'єктами.** -Вони просто не можуть зберігати дані. - -Всі операції з властивостями/методами виконуються за допомогою тимчасових об'єктів. +Вони не можуть зберігати додаткові данні. diff --git a/1-js/05-data-types/01-primitives-methods/article.md b/1-js/05-data-types/01-primitives-methods/article.md index fbd919431..cf3ae1d3d 100644 --- a/1-js/05-data-types/01-primitives-methods/article.md +++ b/1-js/05-data-types/01-primitives-methods/article.md @@ -14,7 +14,7 @@ JavaScript дозволяє працювати з примітивами (ряд Об'єкт - можна зберігати декілька значень як властивості. -- може бути створений за допомогою `{}`, наприклад: `{name: "John", age: 30}`. В JavaScript існують й інші об'єкти; функції - це теж об'єкти. +- може бути створений за допомогою `{}`, наприклад: `{name: "John", age: 30}`. В JavaScript існують й інші об'єкти: функції - це теж об'єкти. Одна з цікавих речей щодо об'єктів полягає в тому, що ми можемо зберігати функцію як одну з його властивостей. @@ -48,7 +48,7 @@ john.sayHi(); // Привіт друже! 1. Примітиви залишаються примітивами. Лише значення, як хотіли. 2. JavaScript дозволяє отримати доступ до методів та властивостей рядків, чисел, булеанів та символів. -3. Коли це трапляється, створюється спеціальний "об'єкт обгортка" з додатковою функціональністю, та потім він знищується. +3. Для цього створюється спеціальний "об'єкт обгортка" з додатковою функціональністю, та потім він знищується. Для кожного примітиву створюється своя "обгортка": `String`, `Number`, `Boolean` та `Symbol`. Отже, вони містять різні набори методів. @@ -91,18 +91,18 @@ alert( n.toFixed(2) ); // 1.23 Наприклад: ```js run -alert( typeof 1 ); // "number" +alert( typeof 0 ); // "number" -alert( typeof new Number(1) ); // "object"! +alert( typeof new Number(0) ); // "object"! ``` -та завдяки тому що `zero` об'єкт, ми побачимо алерт: +Об'єкти завжди повертають `true` в `if`, отже ми побачимо алерт: ```js run let zero = new Number(0); if (zero) { // zero є true, тому що це об'єкт - alert( "zero є true?!?" ); + alert( "zero є true!?!" ); } ```