Типи даних JavaScript: основні поняття, перевірка, перетворення

Якщо програміст працював з такими мовами, як C # або Java, він знає, що для оголошення змінної необхідно встановити статистичний тип даних, які будуть зберігатися в зазначеної змінної з самого початку. У разі, коли потрібно змінити значення зазначеної змінної на інший тип, система видасть помилку. На відміну від них, у JavaScript динамічний тип даних і немає необхідності вказувати, який тип буде зберігати ця змінна, так як в процесі виконання контексту, JS постарається вирішити завдання у відповідності з заданими значеннями.

Основи даних в JavaScript

Дані JS поділяються на дві групи: примітивні об’єкти. Перші включають в себе текстовий рядок (String), логічні дані – істинні або помилкові (Logical) і числа (Number). Існує ще два особливих примітивних типу: Null Undefined. Вони демонструють взаємопов’язані невпорядковані типи даних JavaScript, що мають ім’я і володіють властивостями.

Об’єкт спеціально створюється програмістом, серед них є деякі спеціальні: глобальний, прототип, масиви, функції, клас, зумовлені класи JS, клас RegExp для управління регулярними виразами і пошуку шаблонів у тексті, клас помилок для зберігання інформації, пов’язаної з помилками. Перші мови програмування не використовували об’єкти, а тільки змінні.

Змінні – це простір пам’яті комп’ютера, з яким розробники призначають вміст в основному з числовим значенням, типом символу або рядком символу – буквено-цифровим значенням, що складається тільки з тексту, змішаного з числами. В якості прикладу типу даних JavaScript можна визначити змінну «a», яка містить 32, і записати її, як:

a = 32.

Потім можна змінити значення «a» і зробити:

a = 78.

Або зробити «a» еквівалентним значенням іншої змінної «b», наприклад:

a = b,

Змінні є елементарними об’єктами: числом, символом, істинним або хибним значенням, в той час, як об’єкти є складними, які можуть бути утворені великою кількістю інформації. Але обидві форми займають одне і те ж простір пам’яті, яка може бути більш або менш великим.

Примітивні типи

На відміну від об’єктів, примітивні типи даних JavaScript не є ссылочными, тобто, коли роблять присвоєння значень іншої змінної.

В JS існує такі примітивні типи:

  • логічні;
  • числові;
  • рядкові;
  • нуль;
  • невизначені.

Логічні представляють одну з: “true” або “false”.

  • var boo1 = true;
  • var boo2 = false;

В JS є тільки один тип числа, він може бути написаний з або без десяткової крапки. Число також буває:

  • +Infinity;
  • -Infinity;
  • NaN(не число).

var num1 = 32;

var num2 = + Infinity;

Рядки використовуються для збереження тексту. Вони повинні бути всередині подвійних або одинарних лапок. В JS рядка можна змінювати.

var str1 = ‘привіт, це я’;

var str2 = “привіт, це я”;

Змінна, яка не має значення, не визначена.

var test Var;

console.log (testVar); // не визначено

Boolean – це тип даних, який повертає одне з двох: істина/хибність. Тип даних JavaScript Boolean названий на честь математика Джорджа Буля, тому завжди пишеться з великої літери. Можна продемонструвати принцип роботи даного типу на прикладі:

  • Відкривають консоль JS і вводять кожне з таких тверджень, натискаючи «Enter» після кожної дії, щоб побачити результат.
  • Звертають увагу на те, що однорядковий коментар використовується після кожного оператора, щоб пояснити, що він означає.
  • 1<10 // 1 менше 10?
  • 100> 2000 // 100 більше, ніж 2000?
  • 2 === 2 // 2 в точності дорівнює 2?
  • false === false //
  • Функція Boolean повертає логічне значення змінної. Її також можна використовувати для пошуку логічного результату умови і вирази, це дозволяє використовувати JavaScript функціональний тип даних.

    Незмінні символи

    Символи – це новий примітивний тип JS. Вони створюються з допомогою функції:

    const mySymbol = Symbol(‘mySymbol’).

    Кожен раз, коли програміст викликає цю функцію, створюється новий і унікальний символ. Вони можуть бути використані, як константи, для подання таких понять, як кольору. Символи в основному використовуються в якості ключів властивостей і ніколи не конфліктують з будь-яким іншим ключем – символом або рядком. Наприклад, можна зробити об’єкт ітеративним, використовуваним через «for-of» цикл та інші мовні механізми, використовуючи символ, який зберігається в «Symbol.iterator» в якості ключа.

    У рядку A символ використовується в якості ключа методу. Цей унікальний маркер робить об’єкт повторюваним і дозволяє використовувати «for-of» цикл. Неможливо привести символи рядків, тому що існує примус або неявне перетворення типів даних JavaScript. Заборона примусу запобігає деякі помилки, але також ускладнює роботу з символами.

    Новий тип примітиву – це токени, які є унікальними ідентифікаторами. Програміст створює символи з допомогою фабричної функції «Symbol()», яка слабо схожа на «String» – повернення рядків, коли викликається функцією:

    const symbol1 = Symbol();

    Symbol() має необов’язковий рядковий параметр, який дозволяє дати новоствореному символу опис. Цей опис використовується, коли символ перетворюється в рядок через «toString()» або «String()».

    Арифметичні оператори

    JS, як і всі програмні мови, володіє вбудованою здатністю математичних дій, як калькулятор. Вони виконують над числами або змінними, які представлені, як числа.

    Оператор додавання, представлений знаком плюс (+), додає два значення та повертає суму.

    var x = 2 + 2; // x returns 4

    Оператор віднімання, представлений знаком мінус (-), віднімає два значення та повертає різницю.

    var x = 10 – 7; // x returns 3

    Оператор множення, представлений зірочкою (*), примножує два значення і повертає добуток.

    var x = 4 * 5; // x returns 20

    Оператор ділення, представлений косою рискою (/), розділяє два значення та повертає приватне.

    var x = 20 / 2; // x returns 10

    Менш знайомим є оператор модуля, який повертає залишок після поділу та представлений знаком відсотка (%).

    var x = 10 % 3; // returns 1

    Це означає, що «3» входить до «10» три рази, з «1» залишком.

    Інкремент виконує дію, в якому число буде збільшено на одиницю за допомогою оператора прирощення, представленого знаком подвійного плюса (++).

    var x = 10;x++; // x returns 11

    Це відбувається після призначення. Також можна написати, що відбувається до призначення. Для порівняння:

    ++x;

    var x = 10;

    var y = x++;

    // y is 10, x is 11;

    а також:

    var x = 10;

    var y = ++x;

    // y is 11, x is 11.

    Декремент – кількість буде зменшено на одиницю за допомогою оператора декремента, представленого подвійним знаком мінус (–).

    var x = 10;x–;

    // x 9 returns

    Як і вище, це також можна написати:–x;

    Різновиди операторів JS:

    • оператор присвоювання;
    • арифметичні оператори инкремента і декремента;
    • оператори рівності;
    • реляційні оператори;
    • логічні оператори.

    Функції true або false

    Оператори порівняння будуть оцінювати рівність або різниця двох значень і повертати «true» або «false». Вони зазвичай використовуються в логічних твердженнях. Два знака рівності (==) означають рівні в JS. Починаючим програмістам легко переплутати між одинарними, подвійними і потрійними знаками рівності, потрібно запам’ятати, що один знак рівності застосовує значення змінної і ніколи не оцінює рівність.

    var x = 8;

    var y = 8;

    x == y; // true

    Це вільний тип рівності і буде повертати «true» навіть якщо замість числа використовується рядок.

    var x = 8;

    var y = “8”;

    x == y; // true

    Три знака рівності (===) означають суворе рівність в JS.

    var x = 8;

    var y = 8;

    x === y; // true

    Це більш часто використовувана і більш точна форма визначення рівності, ніж звичайна функція «equal (==)», так як для повернення потрібно, щоб тип і значення були однаковими true.

    var x = 8;

    var y = “8”;

    x === y; // false

    Знак оклику, за яким слідує знак рівності (!=), означає, що він не дорівнює в JS. Це повна протилежність «==», та перевіряє лише значення, а не тип.

    var x = 50;

    var y = 50;

    x != y; // false

    Знак оклику, за яким слідують два знака рівності (!==), означає суворе не рівна. Це повна протилежність (===) і буде перевіряти, як значення, так і тип. Інший знайомий символ, менше (<), перевірить, чи менше значення ліворуч, ніж праворуч. Менше або дорівнює (<=) – те ж саме, що й вище, але так само матиме значення «true». Більше ніж (>) буде перевіряти, більше значення ліворуч, ніж праворуч. Значення більше або рівне (>=), таке ж, як зазначено вище, але воно також буде дорівнює true.

    Динамічна перевірка типів

    Типи даних і змінних у мові JavaScript є основною мови програмування. Багато помилки виконання в JS є помилками типів. Наприклад, коли намагаються помножити «a number» на «a string», отримують помилку у вигляді «Not a Number» повернутого значення. Іноді при виклику функцій і отримують помилку «невизначена is not a function», це відбувається, коли намагаються отримати доступ до властивості, що не визначено. Так як JS не може знайти властивість, то повертає його значення за замовчуванням в резервний: undefined. Інша поширена помилка, пов’язана з типом, коли намагаються змінити або отримати доступ до властивості до значення, яке є null або undefined. Тут немає таких конструкторів, як Undefined або Null.

    Система типів JS допомагає уникнути поширених помилок. За визначенням, він є интерпретируемым і динамічним мовою, і вимагає, щоб система типів працювала під час виконання коду. Мова також намагається допомогти, мовчки конвертуючи типи значень. Зміна типу або примус – це причина, по якій багато розробники переключаються на суворе використання(===) для перевірки рівності значень.

    Динамічна перевірка типу даних JavaScript виконується через бібліотеку TypeRight. Серед інших особливостей він використовує підхід для реалізації наступних псевдокласів, єдина мета яких – бути правими сторонами instanceof оператора:

    • PrimitiveUndefined.
    • PrimitiveNull.
    • PrimitiveBoolean.
    • PrimitiveNumber.
    • PrimitiveString.
    • PrimitiveSymbol.

    TypeRight в даний час не надає клас для перевірки факту, чи є значення об’єктом, але його можна легко додати.

    Контейнери змінних

    Змінні в JS – це контейнери, які містять повторно використовувані дані. До ES2015 змінні JavaScript оголошувалися виключно з допомогою ключового слова var:

    • var x;
    • var y;
    • var z;

    Сьогодні змінні задаються типами: var, let і const. Вони по-своєму унікальні і служать для підвищення ефективності розробки коду, проте рекомендується використовувати: let – по можливості і const – всякий раз, коли значення змінної повинно залишатися постійним. Використання змінних для зберігання даних є основою мови і складається з трьох частин.

    Оголошення змінної – тут змінна зареєстрована у відповідній області видимості. Приклади оголошень змінних:

    • var x;
    • var cup;
    • var car.

    Ініціалізація відбувається при оголошенні змінної. Тут їй призначається пам’ять або простір з допомогою движка JavaScript. З-за цього, як тільки змінна оголошена, вона приймає значення undefined навіть перед присвоюванням.

    Присвоєння змінній – є найбільш важливим кроком при використанні. Тут змінної присвоюються дані, які є значеннями з використанням оператора присвоювання «=».

    Значення JavaScript приймають один із стандартних типів даних:

    • рядок;
    • число;
    • логічний;
    • нуль;
    • невизначений.

    Синтаксис для призначення типів можна побачити вище тільки з рядками, що мають одинарні або подвійні лапки. Також логічні значення можуть бути або істиною, або брехнею. При іменуванні змінних в JavaScript необхідно дотримуватися певні правила, а саме:

  • Імена повинні починатися з малої літери.
  • Імена не можуть містити символи або починатися з символів.
  • Імена не можуть починатися з цифри.
  • Імена можуть містити поєднання рядків верхнього регістру, рядків нижнього регістру і цифр.
  • Способи ініціалізації JS

    Змінна ініціалізується, коли її вміст або значення встановлюються вперше. Наприклад, ціна = 22,55 – це може бути спосіб ініціалізації змінної. Вона може бути оголошена і ініціалізована одночасно. Наприклад, можна написати змінну “ціна = 22,55”, з якої змінна була оголошена і ініціалізована в одному рядку. JS не вимагає оголошення типу змінних і навіть дозволяє змінної зберігати вміст різних типів в різний час. Наприклад, можна використовувати “ціну = 22,55”, а в більш пізньому місці написати ціну = «дуже дорого». Це те, що в інших мовах може призвести до помилки, але приймається JavaScript.

    JS дозволяє використовувати змінну без її оголошення. У багатьох мовах програмування необхідно оголосити змінну, перш ніж її можна буде використовувати, але JS не зобов’язує. Коли мова знаходить не оголошену змінну, він автоматично створює змінну і дозволяє її використання.

    Неправильне використання ключового слова «var» може призвести до помилки, із-за якої JS перестає працювати, то є веб-сторінка буде відображатися неправильно, var використовується тільки для оголошення змінної, її не можна використовувати ні для чого іншого. Як тільки змінна була оголошена, вона буде використовуватися без попереднього їй ключового слова var. Якщо змінна вже оголошена, JavaScript спробує продовжити і отримати її.

    Демонстрація роботи

    Можна продемонструвати роботу коду, щоб закріпити основні поняття типів даних мови JavaScript, програма зчитує код, зазначений на малюнку та збережений у файлі розширення html.

    Після візуалізації результату переконуються, що веб-сторінка відображається нормально, тобто JavaScript виконується нормально, а очікуваний результат повинен показати наступне:

  • Змінна ціна дійсна: undefined (прийняти).
  • Змінна data1 дійсна null (прийняти).
  • Змінна ціна дійсна: 32,55 (прийняти).
  • Подвійна ціна: 65,1 (прийняти).
  • Сума, отримана в результаті множення ціни на кількість, становить: 325,5 (прийняти).
  • Змінна ціни тепер: дуже дорога (прийняти).
  • Подвійна ціна: NaN (прийняти).
  • Змінна ціни була оголошена вдруге і тепер дійсна 99,55 (прийняти).
  • Змінна $ discount_applied: 0,55 (прийняти).
  • Розуміння того, як працює мова, автоматично зробить розробника кращим програмістом. Але враховуючи, що «практика удосконалює», недостатньо знати тільки теорію, важливо почати застосовувати на практиці основи бази даних JavaScript та функціонування даних. Ознайомившись з вищенаведеною інформацією, починаючому програмісту нескладно буде відповісти на питання про те, скільки типів даних в мові JavaScript.