Які типи в JS змінюються а які ні

Які типи в 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 існує три типи лапок.

  1. Подвійні лапки: "Привіт".
  2. Одинарні лапки: 'Привіт'.
  3. Зворотні лапки: `Привіт`.

Подвійні або одинарні лапки є «простими», між ними немає різниці у 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)

Останні три рядки потребують пояснення:

  1. Math - це вбудований об'єкт, який надає математичні операції та константи. Ми розглянемо його докладніше у розділі Числа. Тут він є лише прикладом об'єкта.
  2. Результатом виклику typeof null є "object" . Це офіційно визнана помилка в typeof, що веде початок з часів створення JavaScript і збережена для сумісності. Звичайно, null не є об'єктом. Це особливе значення з окремим типом.
  3. Виклик 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" – це помилка у мові, насправді це об'єкт.

    У наступних розділах ми зосередимося на примітивних значеннях, а коли познайомимося з ними, перейдемо до об'єктів.

Подібні статті

Останні статті

Категорії