You signed in with another tab or window.Reload to refresh your session.You signed out in another tab or window.Reload to refresh your session.You switched accounts on another tab or window.Reload to refresh your session.Dismiss alert
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
Значення в JavaScript завжди має певний тип даних. Наприклад, рядок або число.
В JavaScript є вісім основних типів даних.В цьому розділі ми розглянемо їх в цілому, а в наступних — детально поговоримо про кожен з них.
У JavaScript є вісім основних типів даних.У цьому розділі ми розглянемо їх в цілому, а в наступних — детально поговоримо про кожен з них.
Ми можемо призначити змінній будь-який тип даних. Наприклад, в один момент змінна може бути рядком, а в інший - числом:
Expand All
@@ -12,7 +12,7 @@ let message = "привіт";
message = 123456;
```
Мови програмування, якідозволяють таке робити, називаються "динамічно типізованими". Мається на увазі, що типи даних визначені, але змінні не прив’язанні до жодного типу.
Мови програмування, якідають змогу таке робити, називаються "динамічно типізованими". Мається на увазі, що типи даних визначені, але змінні не прив’язанні до жодного типу.
## Число (number)
Expand All
@@ -23,9 +23,9 @@ n = 12.345;
Тип _number_ представляє і цілі числа, і числа з рухомою точкою.
Є багато операцій, що можна робитис числами, наприклад, множення `*`, ділення `/`, додавання `+`, віднімання `-` тощо.
Є багато операцій, що можна робитиз числами, наприклад, множення `*`, ділення `/`, додавання `+`, віднімання `-` тощо.
Окрім звичайних чисел,існують так звані "спеціальні числові значення", що також мають відношення до цього типу даних: `Infinity`, `-Infinity` і `NaN`.
Окрім звичайних чисел,є так звані "спеціальні числові значення", що також мають відношення до цього типу даних: `Infinity`, `-Infinity` і `NaN`.
- `Infinity` являє собою математичну [нескінченність](https://uk.wikipedia.org/wiki/Нескінченність) ∞. Це спеціальне значення, що є більшим за будь-яке число.
Expand All
@@ -46,67 +46,67 @@ n = 12.345;
alert("not a number" / 2); // NaN, таке ділення є помилковим
```
`NaN` є "причепливим" ("заразливим"). Будь-які наступні операціїз `NaN`будуть повертати `NaN`:
`NaN` є "причепливим" ("заразливим"). Будь-яка подальша математична операціяз `NaN`повертає `NaN`:
```js run
alert("not a number" / 2 + 5); // NaN
```
Таким чином, якщо у математичному виразі десь є `NaN`, це значення буде поширюватися на весь результат.
Отже, якщо у математичному виразі десь є `NaN`, це значення буде поширюватися на весь результат.
```smart header="Математичні операції є безпечними"
Обчислювання є "безпечним" в JavaScript. Ми можемо робити будь-що: ділити на нуль, звертатися до нечислового рядка як до числа тощо.
Обчислення є "безпечним" в JavaScript. Ми можемо робити будь-що: ділити на нуль, звертатися до нечислового рядка як до числа тощо.
Виконання скрипта ніколи не зупиниться з фатальною помилкою (не "вмре"). У найгіршому випадку ми отримаємо в результаті `NaN`.
```
Спеціальні числові значення формально належать до типу "number". Хоча, звісно, вони не є числами у загальноприйнятому розумінні.
Докладніше роботус числами ми розглянемо у розділі <info:number>.
Докладніше роботуз числами ми розглянемо у розділі <info:number>.
## BigInt [#bigint-type]
В JavaScript, тип "number" не можевміщувати числа більші за <code>(2<sup>53</sup>-1)</code> (це `9007199254740991`), або менші за <code>-(2<sup>53</sup>-1)</code> для від’ємних чисел. Це технічне обмеження,викликане їх внутрішньою реалізацією.
У JavaScript, тип "number" не можемістити числа більші за <code>(2<sup>53</sup>-1)</code> (це `9007199254740991`), або менші за <code>-(2<sup>53</sup>-1)</code> для від’ємних чисел. Це технічне обмеження,спричинене їхньою внутрішньою реалізацією.
Для більшості потреб цього достатньо, але бувають випадки, коли нам потрібні дійсно великі числа, наприклад, для криптографії або мікроксекундних часових міток (timestamps).
Нещодавно в мову був доданий тип `BigInt` для представлення цілих чисел довільної довжини.
Значення з типом `BigInt` створюєтьсяшляхом додавання `n`в кінець цілого числа:
Значення з типом `BigInt` створюєтьсячерез додавання `n`у кінець цілого числа:
```js
// буква "n"в кінці означає, що це число типу BigInt
// буква "n"у кінці означає, що це число типу BigInt
Через те, що тип `BigInt` рідко використовується, ми не розглядатимемо його в цьому розділі, проте ми винесли його в окремий розділ <info:bigint>. Прочитайте його, якщо вам потрібні такі великі числа.
```smart header="Проблемиз сумісністю"
```smart header="Проблемиіз сумісністю"
Цієї миті, підтримка типу `BigInt` є в останніх версіях Firefox/Chrome/Edge/Safari, але не в IE.
```
На сайті *MDN* є [таблиця сумісності](https://developer.mozilla.org/uk/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Сумісність_з_веб-переглядачами), де показано, які версії браузерів підтримують тип `BigInt`.
## Рядок (string)
Рядокв JavaScriptповинен бути оточений лапками.
Рядоку JavaScriptмає бути оточений лапками.
```js
let str = "Привіт";
let str2 = 'Одинарні лапки також дозволяються';
let phrase = `так можна вставляти ${str}`;
```
В JavaScriptіснує три типи лапок.
У JavaScriptє три типи лапок.
1. Подвійні лапки: `"Привіт"`.
2. Одинарні лапки: `'Привіт'`.
3. Зворотні лапки: <code>`Привіт`</code>.
Подвійні та одинарні лапки є "звичайними". Тобто немає ніякої різниці, які саме використовувати.
Зворотні лапки є розширенням функціональності. Вонидозволяють вбудовувати змінні та вирази в рядок, обрамляючи їх в `${…}`, наприклад:
Зворотні лапки є розширенням функціональності. Вонидають змогу вбудовувати змінні та вирази в рядок, обрамляючи їх в `${…}`, наприклад:
alert("результат: ${1 + 2}"); // результат: ${1 + 2} (подвійні лапки не мають ніякого впливу)
```
Більш детально ми будемо висвітлювати рядкиу розділі <info:string>.
Більш детально ми будемо висвітлювати рядкив розділі <info:string>.
```smart header="Не існує типу *символ* (*character*)."
У деяких мовахіснує спеціальний тип "character" для позначення єдиного символу. Наприклад,в мовах C та Java це `char`.
```smart header="Немає типу *символ* (*character*)."
У деяких мовахє спеціальний тип "character" для позначення єдиного символу. Наприклад,у мовах C та Java це `char`.
В JavaScriptне існує такого типу. Є єдиний тип: `string`. Рядок може містити нуль символів (бути пустим), один символ або більше.
У JavaScriptнемає такого типу. Є єдиний тип: `string`. Рядок може містити нуль символів (бути пустим), один символ або більше.
```
## Булевий або логічний тип (boolean)
Expand DownExpand Up
@@ -170,7 +170,7 @@ let age = null;
Це лише спеціальне значення, яке представляє "нічого", "порожнє" або "невідоме значення".
В наведеному вище коді зазначено, що значення змінної `age` невідоме.
У наведеному вище коді зазначено, що значення змінної `age` невідоме.
## Значення "undefined"
Expand All
@@ -197,23 +197,23 @@ age = undefined;
alert(age); // "undefined"
```
...Але ми не рекомендуємо так робити. Як правило, ми використовуємо `null`,щоб присвоїти змінній значення "порожнє" або "невідоме", тоді як `undefined` зарезервоване для позначення початкового значення для неприсвоєних речей.
...Але ми не рекомендуємо так робити. Як правило, ми використовуємо `null`,щоби присвоїти змінній значення "порожнє" або "невідоме", тоді як `undefined` зарезервоване для позначення початкового значення для неприсвоєних речей.
## Об’єкти (object) та символи (symbol)
Тип `object` є особливим типом.
Всі інші типи називаються "примітивами", тому щоїх значення можуть містити тільки один елемент (це може бути рядок, число, або будь-що інше). В об’єктах же зберігаються колекції даних і більш складні структури.
Усі інші типи називаються "примітивами", тому щоїхні значення можуть містити тільки один елемент (це може бути рядок, число, або будь-що інше). В об’єктах же зберігаються колекції даних і більш складні структури.
Об’єкти є важливою частиною мови, тому ми окремо розглянемо їхв розділі <info:object> після того, як дізнаємося більше про примітиви.
Об’єкти є важливою частиною мови, тому ми окремо розглянемо їху розділі <info:object> після того, як дізнаємося більше про примітиви.
Тип `symbol` використовується для створення унікальних ідентифікаторів в об’єктах. Ми згадали цей тип для повноти, протедетальніше вивчимо його після об’єктів.
Тип `symbol` використовується для створення унікальних ідентифікаторів в об’єктах. Ми згадали цей тип для повноти, протедокладніше вивчимо його після об’єктів.
## Оператор typeof [#type-typeof]
Оператор `typeof` повертає тип аргументу. Це корисно, коли ми хочемо обробляти значення різних типів по-різному або просто хочемо зробити швидку перевірку.
Останні три рядки можуть потребувати додаткового пояснення:
1. `Math` — це вбудований об’єкт, який забезпечує математичні операції. Ми вивчимо його в розділі <info:number>. Тут він використаний лише як приклад об’єкта.
2. Результатом `typeof null` є `"object"`. Це офіційно визнана помилкав поведінці`typeof`, щоіснує ще з ранніх днів JavaScript і зберігається для сумісності. Безперечно, `null` не є об’єктом. Це особливе значення з власним типом.В цьомувипадку поведінка `typeof` некоректна.
2. Результатом `typeof null` є `"object"`. Це офіційно визнана помилкаповедінки`typeof`, щоє ще з ранніх днів JavaScript і зберігається для сумісності. Безперечно, `null` не є об’єктом. Це особливе значення з власним типом.У цьомуразі поведінка `typeof` некоректна.
3. Результатом `typeof alert` є `"function"`, тому що `alert` — це функція. Ми будемо вивчати функції в наступних розділах, де ми також побачимо, що в JavaScript немає спеціального типу "function". Функції належать до типу "об’єкт". Але `typeof` трактує їх по-іншому, повертаючи `"function"`. Це також присутнє з ранніх днів JavaScript. Технічно, така поведінка не зовсім правильна, але може бути зручною на практиці.
```smart header="Синтаксис `typeof(x)`"
Можливо ви зустрічали інший синтаксис: `typeof(x)`. Це те саме, що `typeof x`.
Щоб було зрозуміло: `typeof` -- це оператор, а не функція. Тут дужки не є частиною `typeof`. Це щось на кшталт математичних дужок для групування.
Щоби було зрозуміло: `typeof` -- це оператор, а не функція. Тут дужки не є частиною `typeof`. Це щось на кшталт математичних дужок для групування.
Зазвичай, такі дужки містять математичні вирази, як `(2 + 2)`, але тут вони містять лише один аргумент `(x)`. Ці дужкидозволяють опустити пробіл між оператором `typeof` та його аргументом, і декому це подобається.
Зазвичай, такі дужки містять математичні вирази, як `(2 + 2)`, але тут вони містять лише один аргумент `(x)`. Ці дужкидають змогу опустити пробіл між оператором `typeof` та його аргументом, і декому це подобається.
Тому вони надають перевагу синтаксису `typeof(x)`, проте синтаксис `typeof x` набагато поширеніший.
```
## Підсумки
В JavaScriptіснує 8 основних типів.
У JavaScriptє 8 основних типів.
- `number` для будь-яких чисел: цілих або з рухомою точкою; цілі числа обмежені до <code>±(2<sup>53</sup>-1)</code>.
Оператор `typeof`дозволяє нам бачити, який тип зберігається в змінній.
Оператор `typeof`дає змогу нам бачити, який тип зберігається в змінній.
- Зазвичай використовують синтаксис `typeof x`, проте `typeof(x)` також можливий.
- Повертає рядокз назвою типу, як-от `"string"`.
- Повертає рядокіз назвою типу, як-от `"string"`.
- Для `null` повертає `"object"` —- це помилка в мові, `null` насправді не об’єкт.
В наступних розділах ми зосередимося на примітивних значеннях, а коли ознайомимося з ними, то перейдемо до об’єктів.
У наступних розділах ми зосередимося на примітивних значеннях, а коли ознайомимося з ними, то перейдемо до об’єктів.
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.