Які типи в JS змінюються а які ні
Типи даних
Значення JavaScript завжди відноситься до даних певного типу. Наприклад, це може бути рядок чи число.
Є вісім основних типів даних JavaScript. У цьому розділі ми розглянемо їх загалом, а наступних розділах поговоримо докладніше про кожного.
Змінна JavaScript може містити будь-які дані. В один момент там може бути рядок, а в інший – число:
// Не буде помилкою let message = "hello"; message = 123 456;
Мови програмування, у яких таке можливе, називаються динамічно типізованими. Це означає, що типи даних є, але змінні не прив'язані до жодного.
Число
Числовий тип даних ( number ) представляє як цілочисельні значення, і числа з плаваючою точкою.
Існує безліч операцій для чисел, наприклад, множення *, розподіл /, додавання +, віднімання - і так далі.
Крім звичайних чисел, існують так звані «спеціальні числові значення», які відносяться до цього типу даних: Infinity, -Infinity та NaN.
-
Infinity є математичну нескінченність ∞. Це особливе значення, яке більше за будь-яке число. Ми можемо отримати його в результаті розподілу на нуль:
alert(1/0); // Infinity
alert (Infinity); // Infinity
alert("не число" / 2); // NaN, такий поділ є помилкою
alert(NaN + 1); // NaN alert (3 * NaN); // NaN alert ( "не число" / 2 - 1); // NaN
Математичні операції JavaScript «безпечні». Ми можемо робити будь-що: ділити на нуль, поводитися з нечисловими рядками як з числами і т.д.
Скрипт ніколи не зупиниться з фатальною помилкою (не помре). У найгіршому випадку ми отримаємо NaN як результат виконання.
Спеціальні числові значення відносяться до типу «число». Звичайно, це не числа у звичному значенні цього слова.
Докладніше про роботу з числами ми поговоримо у розділі Числа.
BigInt
У JavaScript тип number не може безпечно працювати з числами, більшими, ніж (253-1) (тобто 9007199254740991) або меншими, ніж -(253-1) для негативних чисел.
Якщо говорити дуже точно, то, технічно, тип number може зберігати великі цілі числа (до 1.7976931348623157 * 10308), але за межами безпечного діапазону цілих чисел ±(2 53 -1) буде помилка точності, так як не всі цифри поміщаються у фіксовану 64-бітну пам'ять. Тому можна зберігати "приблизне" значення.
Наприклад, ці два числа (за межами безпечного діапазону) збігаються:
console.log(9007199254740991 + 1); // 9007199254740992 console.log(9007199254740991 + 2); // 9007199254740992
Тобто всі непарні цілі числа більші (2 53 -1) взагалі не можуть зберігатися в типі number .
У більшості випадків безпечного діапазону чисел від -(2 53 -1) до (2 53 -1) цілком достатньо, але іноді нам потрібно весь діапазон справді гігантських цілих чисел без будь-яких обмежень або пропущених значень усередині нього. Наприклад, у криптографії або під час використання мітки часу («timestamp») з мікросекундами.
Тип BigInt було додано до JavaScript, щоб дати можливість працювати з цілими числами довільної довжини.
Щоб створити значення типу BigInt, необхідно додати n в кінець числового літералу:
// символ "n" в кінці означає, що це BigInt const bigInt = 1234567890123456789012345678901234567890n;
Оскільки необхідність використання BigInt –чисел з'являється досить рідко, ми розглянемо їх у окремому розділі BigInt. Ознайомтеся з нею, коли вам знадобляться такі великі цифри.
В даний момент BigInt підтримується лише у браузерах Firefox, Chrome, Edge та Safari, але не підтримується в IE.
Рядок
Рядок ( string ) в JavaScript повинна бути укладена в лапки.
let str = "Привіт"; let str2 = 'Одинарні лапки теж підійдуть'; let phrase = `Зворотні лапки дозволяють вбудовувати змінні $`;
У JavaScript існує три типи лапок.
- Подвійні лапки: "Привіт".
- Одинарні лапки: 'Привіт'.
- Зворотні лапки: `Привіт`.
Подвійні або одинарні лапки є «простими», між ними немає різниці у JavaScript.
Зворотні лапки мають розширену функціональність. Вони дозволяють нам вбудовувати вирази в рядок, укладаючи їх у $. Наприклад:
let name = "Іван"; // Вставимо змінну alert(`Привіт, $!`); // Привіт, Іване! // Вставимо вираз alert(`результат: $`); // Результат: 3
Вираз усередині $ обчислюється, і його результат стає частиною рядка. Ми можемо покласти туди все, що завгодно: змінну name, або вираз 1 + 2, або щось складніше.
Зверніть увагу, що це можна робити лише у зворотних лапках. Інші лапки не мають такої функціональності вбудовування!
alert("результат: $"); // результат: $ (подвійні лапки нічого не роблять)
Ми розглянемо рядки докладніше у розділі Рядки.
У деяких мовах, наприклад C і Java, для зберігання одного символу, наприклад "a" або "%", існує окремий тип. У мовах C і Java це char.
JavaScript подібного типу немає, є тільки тип string . Рядок може містити нуль символів (бути порожнім), один символ або безліч.
Булевий (логічний) тип
Булевий тип (boolean) може приймати лише два значення: true (істина) та false (брехня).
Такий тип зазвичай використовується для зберігання значень так/ні: true означає «так, правильно», а false означає «ні, не правильно».
let nameFieldChecked = true; // так, поле відзначено let ageFieldChecked = false; // Ні, поле не відмічено
Бульові значення також можуть бути результатом порівнянь:
let isGreater = 4 > 1; alert(isGreater); // true (результатом порівняння буде "так")
Ми розглянемо булеві значення докладніше у розділі Логічні оператори.
Значення "null"
Спеціальне значення null не відноситься до жодного з типів, описаних вище.
Воно формує окремий тип, який містить лише значення null :
JavaScript null не є «посиланням на неіснуючий об'єкт» або «нульовим покажчиком», як у деяких інших мовах.
Це просто спеціальне значення, яке є «нічим», «порожнім» або «значенням невідомим».
У наведеному вище коді зазначено, що значення змінної age невідоме.
Значення "undefined"
Спеціальне значення undefined також стоїть окремо. Воно формує тип із себе так само, як і null .
Воно означає, що значення не було присвоєно.
Якщо змінна оголошена, але їй присвоєно ніякого значення, її значенням буде undefined :
let age; alert(age); // виведе "undefined"
Технічно ми можемо присвоїти значення undefined будь-якої змінної:
let age = 123; // Змінюємо значення на undefined age = undefined; alert(age); // "undefined"
…Але так робити не рекомендується. Зазвичай null використовується для присвоєння змінної порожнього або невідомого значення, а undefined - для перевірок, чи була змінна призначена.
Об'єкти та символи
Тип object (об'єкт) – особливий.
Всі інші типи називаються «примітивними», тому що їх значеннями можуть бути лише прості значення (чи то рядок, чи число, чи щось ще). У об'єктах зберігають колекції даних чи складніші структури.
Об'єкти займають важливе місце у мові та потребують особливої уваги. Ми розберемося з ними у розділі Об'єкти після того, як дізнаємося більше про примітиви.
Тип символу (символ) використовується для створення унікальних ідентифікаторів в об'єктах. Ми згадуємо про нього для повноти картини, вивчимо цей тип після об'єктів.
Оператор typeof
Оператор типуповертає тип аргументу. Це корисно, коли хочемо обробляти значення різних типів по-різному чи просто хочемо зробити перевірку.
У нього є дві синтаксичні форми:
// Звичайний синтаксис typeof 5 // Виведе "number" // Синтаксис, що нагадує виклик функції (зустрічається рідше) typeof(5) // Також виведе "number"
Якщо передається вираз, потрібно укладати їх у дужки, т.к. typeof має вищий пріоритет, ніж бінарні оператори:
typeof 50 + "Квартир"; // Виведе "number Квартир" typeof (50 + "Квартир"); // Виведе "string"
Іншими словами, дужки необхідні визначення типу значення, яке вийшло в результаті виконання виразу в них.
Виклик typeof x повертає рядок з ім'ям типу:
typeof undefined // "undefined" typeof 0 // "number" typeof 10n // "bigint" typeof true // "boolean" typeof "foo" // "string" typeof Symbol("id") // "symbol" typeof Math // "object" (1) typeof null // "object" (2) typeof alert // "function" (3)
Останні три рядки потребують пояснення:
- Math - це вбудований об'єкт, який надає математичні операції та константи. Ми розглянемо його докладніше у розділі Числа. Тут він є лише прикладом об'єкта.
- Результатом виклику typeof null є "object" . Це офіційно визнана помилка в typeof, що веде початок з часів створення JavaScript і збережена для сумісності. Звичайно, null не є об'єктом. Це особливе значення з окремим типом.
- Виклик typeof alert повертає "function" , тому що alert є функцією. Ми вивчимо функції в наступних розділах, де заразом побачимо, що JavaScript немає спеціального типу «функція».Функції належать до об'єктного типу. Але типобігу обробляє їх особливим чином, повертаючи "функцію" . Так також повелося від створення JavaScript. Формально це не так, але може бути зручним на практиці.
Разом
JavaScript має 8 основних типів даних.
- Сім із них називають «примітивними» типами даних:
- number для будь-яких чисел: цілих чисел з плаваючою точкою; цілі численні значення обмежені діапазоном ±(2 53 -1) .
- bigint для цілих чисел довільної довжини.
- string для рядків. Рядок може містити нуль або більше символів, немає окремого символьного типу.
- boolean для true/false.
- null для невідомих значень – окремий тип, має одне значення null .
- undefined для неприсвоєних значень – окремий тип, що має значення undefined .
- символ для унікальних ідентифікаторів.
- об'єкт для складніших структур даних.
Оператор typeof дозволяє нам побачити, який тип даних збережений у змінній.
- Має дві форми: typeof x або typeof(x).
- Повертає рядок із ім'ям типу. Наприклад, "string".
- Для null повертається "object" – це помилка у мові, насправді це об'єкт.
У наступних розділах ми зосередимося на примітивних значеннях, а коли познайомимося з ними, перейдемо до об'єктів.
Подібні статті
- Які три типи грецьких колон
- Які чотири типи країв листя
- Які чотири типи скребків
- Які типи забезпечують підсистем Еіс
- Які два основні типи християнських храмів
- Які три основні типи сніжинок
- Які типи вентиляторів бувають
- Які три типи клоунів існують