- Notifications
You must be signed in to change notification settings - Fork179
Methods of primitives#10
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
Merged
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
7 commits Select commitHold shift + click to select a range
2bf4a57
first try
stevermeister0bf5087
cleanup + task translation
stevermeister471412a
grammar cleanup
stevermeister127a02d
cleanup
stevermeister4bc3284
cleanup after review
stevermeister3d51eff
small language correction
tarasyyyk3403c98
small language corrections
tarasyyykFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
26 changes: 13 additions & 13 deletions1-js/05-data-types/01-primitives-methods/1-string-new-property/solution.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,31 @@ | ||
Спробуйте запустити: | ||
```js run | ||
let str = "Привіт"; | ||
str.test = 5; // (*) | ||
alert(str.test); | ||
``` | ||
Ви можете отримати два результати: | ||
1. `undefined` | ||
2.помилку. | ||
Чому? Давайте повторимо те, що відбувається в рядку `(*)`: | ||
1.Коли ми намагаємося отримати доступ до`str`, створюється "об'єкт обгортка". | ||
2.Операція з властивістю здійснюється в ній. Отже, об'єкт отримує властивість`test`. | ||
3.Операція закінчується, і "об'єкт обгортка" зникає. | ||
Отже, на останньому рядку`str`не має властивості. Для кожної операції створюється новий об'єкт обгортка. | ||
Деякі браузери можуть вирішити додатково обмежити програміста і взагалі заборонити присвоювати властивості примітивам. Тому на практиці ми можемо бачити помилки в рядку`(*)`.Але це трохи відрізняється від специфікації. | ||
**Цей приклад чітко показує, що примітиви не є об'єктами.** | ||
Вони просто не можуть зберігати дані. | ||
Всі операції з властивостями/методами виконуються за допомогою тимчасових об'єктів. |
9 changes: 5 additions & 4 deletions1-js/05-data-types/01-primitives-methods/1-string-new-property/task.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
113 changes: 57 additions & 56 deletions1-js/05-data-types/01-primitives-methods/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -1,130 +1,131 @@ | ||||||||
# Методи примітивів | ||||||||
JavaScript дозволяє працювати з примітивами (рядок, число, і т.д.) так само як з об'єктами. | ||||||||
Вони також надають методи для роботи. Ми вивчимо їх найближчим часом, але спочатку подивимось як воно працює, тому що примітиви не є об'єктами (і тут ми зробимо це ще більш зрозумілим). | ||||||||
Давайте розглянемо різницю між примітивами та об'єктами. | ||||||||
Примітив | ||||||||
- є значенням примітивного типу | ||||||||
- існує 6 типів примітивів: `string`, `number`, `boolean`, `symbol`, `null` та `undefined`. | ||||||||
Об'єкт | ||||||||
- можна зберігати декілька значень як властивості. | ||||||||
- може бути створений за допомогою `{}`, наприклад: `{name: "John", age: 30}`. В JavaScript існують й інші об'єкти; функції - це теж об'єкти. | ||||||||
Одна з цікавих речей щодо об'єктів полягає в тому, що ми можемо зберігати функцію як одну з його властивостей. | ||||||||
```js run | ||||||||
let john = { | ||||||||
name: "John", | ||||||||
sayHi: function() { | ||||||||
alert("Привіт друже!"); | ||||||||
} | ||||||||
}; | ||||||||
john.sayHi(); //Привіт друже! | ||||||||
``` | ||||||||
Отже, ми створили об'єкт`john`з методом `sayHi`. | ||||||||
Вже існує багато вбудованих об'єктів, які працюють з датами, помилками, елементамиHTMLі т.д. Вони мають різні властивості і методи. | ||||||||
Але за все потрібно платити! | ||||||||
Об'єкти "важчі", ніж примітиви. Вони вимагають додаткових ресурсів для підтримки внутрішньої обробки. Але, оскільки властивості і методи дуже корисні в програмуванні, двигунJavaScriptнамагається оптимізувати їх для зменшення додаткового навантаження. | ||||||||
##Примітив як об'єкт | ||||||||
Маємо парадокс, з яким стикається автор #"4995f4496da72f08d1a02ac5c783b397bce5084a48eda7723b398fa88b7cc590"> | ||||||||
-Є багато речей, які можна було б зробити з примітивом-рядком або числом. Було б добре отримати доступ до цих методів. | ||||||||
-Примітиви повинні бути максимально швидкими та легкими. | ||||||||
Рішення виглядає трошки дивно, але так і є: | ||||||||
1.Примітиви залишаються примітивами. Лише значення, як хотіли. | ||||||||
2.JavaScript дозволяє отримати доступ до методів та властивостей рядків, чисел, булеанів та символів. | ||||||||
3.Коли це трапляється, створюється спеціальний "об'єкт обгортка" з додатковою функціональністю, та потім він знищується. | ||||||||
Для кожного примітиву створюється своя "обгортка": `String`, `Number`, `Boolean`та `Symbol`.Отже, вони містять різні набори методів. | ||||||||
Наприклад: існує метод[str.toUpperCase()](https://developer.mozilla.org/uk/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase)якій повертає рядок з великими літерами. | ||||||||
Ось як він працює: | ||||||||
```js run | ||||||||
let str = "Привіт"; | ||||||||
alert( str.toUpperCase() ); //ПРИВІТ | ||||||||
``` | ||||||||
Не складно, так? Ось що саме трапляється в `str.toUpperCase()`: | ||||||||
1.Рядок`str`є примітивом. Тому під час звернення до його властивості створюється спеціальний об'єкт, який знає значення рядка і має корисні методи, такі як `toUpperCase()`. | ||||||||
2.Цей метод виконується і повертає новий рядок (що показує `alert`). | ||||||||
3.Спеціальний об'єкт руйнується, залишаючи лише примітив `str`. | ||||||||
Отже примітиви можуть надавати методи, але залишаються "легкими". | ||||||||
Двигун JavaScriptдобре оптимізує цей процес. Він навіть може пропустити створення додаткового об'єкта взагалі. Але він все ще повинен дотримуватися специфікації і вести себе так, наче він її створює. | ||||||||
Число має свої методи, наприклад:[toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)- округлює число до заданої точності: | ||||||||
```js run | ||||||||
let n = 1.23456; | ||||||||
alert( n.toFixed(2) ); // 1.23 | ||||||||
``` | ||||||||
Ми переглянемо більш конкретні методи у розділах <info:number>та <info:string>. | ||||||||
````warn header="Конструктори `String/Number/Boolean`лише для внутрішнього використання" | ||||||||
Деякі мови як Javaдозволяють створювати "об'єкт обгортку" для примітивів явно використовуючи синтаксис як `new Number(1)`або `new Boolean(false)`. | ||||||||
У JavaScript це також можливо з історичних причин, але надзвичайно **не рекомендується**.Це призведе до непередбачуваних речей. | ||||||||
Наприклад: | ||||||||
```js run | ||||||||
alert( typeof 1 ); // "number" | ||||||||
alert( typeof new Number(1) ); // "object"! | ||||||||
``` | ||||||||
та завдяки тому що `zero` об'єкт, ми побачимо алерт: | ||||||||
```js run | ||||||||
let zero = new Number(0); | ||||||||
if (zero) { // zeroє true,тому що це об'єкт | ||||||||
alert( "zeroє true?!?" ); | ||||||||
} | ||||||||
``` | ||||||||
З іншого боку, використання тих же самих функцій `String / Number / Boolean` без `new` є абсолютно розумною і корисною річчю. Вони перетворюють значення у відповідний тип: до рядка, числа або булевого (примітиву). | ||||||||
Наприклад, це цілком правильно: | ||||||||
```js | ||||||||
let num = Number("123"); //конвертує рядок в число | ||||||||
``` | ||||||||
```` | ||||||||
````warn header="null/undefinedне мають методів" | ||||||||
Винятки становлять спеціальні примітиви`null`і `undefined`. Вони не мають відповідних "об'єктів обгорток" і не надають ніяких методів. Ми можемо назвати їх "найпримітивнішими". | ||||||||
Спроба доступу до властивості такого значення дасть помилку: | ||||||||
```js run | ||||||||
alert(null.test); //помилка | ||||||||
```` | ||||||||
##Підсумки | ||||||||
-Примітиви, крім `null`і `undefined`, дають багато корисних методів. Ми вивчимо їх у наступних розділах. | ||||||||
-Формально, ці методи працюють через тимчасові об'єкти, але двигунJavaScriptоптимізовано для швидкого виконання цих операцій, тому нам не треба хвилюватися. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.