Все используемые данные в javascript имеют определенный тип. В JavaScript имеется восемь типов данных:
String: представляет строку
Number: представляет числовое значение
BigInt: предназначен для представления очень больших целых чисел
Boolean: представляет логическое значение true или false
Undefined: представляет одно специальное значение - undefined и указывает, что значение не установлено
Null: представляет одно специальное значение - null и указывает на отсутствие значения
Symbol: представляет уникальное значение, которое часто применяется для обращения к свойствам сложных объектов
Object: представляет комплексный объект
Первые семь типов представляют примитивные типы данных. Последний тип - Object представляет сложный, комплексный тип данных, который состоит из значений примитивных типов или других объектов. Рассмотрим основные примитивные типы данных.
Тип Number представляет числа в JavaScript, которые могут быть целыми или дробными:
Целые числа, например, 35. Мы можем использовать как положительные, так и отрицательные числа. Диапазон используемых чисел: от -253 до 253
Дробные числа (числа с плавающей точкой). В качестве разделителя дробной и целой части применяется точка, например, 3.5575
. Опять же можно использовать как положительные, так и отрицательные числа. Для
чисел с плавающей точкой используется тот же диапазон:
от -253 до 253
Например:
const x = 45; const y = 123.897; const z = -0.123;
JavaScript поддерживает возможность определять числа в двоичной, восьмеричной и шестнадцатеричной системах, что очень удобно, если нам предстоить проводить поразрядные операции с отдельными битами числа. Для определения числа в двоичной системе, перед числом указывается префикс 0b:
const num1 = 0b1011; // число 11 в десятичной системе console.log(num1); // 11
В данном случае константа num1 равна 0b1011
, что в десятичной системе эквивалентно 11.
Для определения числа в восьмеричной системе, перед числом указывается префикс 0o:
const num1 = 0o11; // число 9 в десятичной системе console.log(num1); // 9
Для определения числа в шестнадцатеричной системе, перед числом указывается префикс 0x:
const num1 = 0xff; // число 255 в десятичной системе console.log(num1); // 255 const num2 = 0x1A; // число 26 в десятичной системе console.log(num2); // 26
Начиная со стандарта ECMA2021 в JavaScript для увеличения читабельности в качестве разделителя между разрядами можно использовать символ подчеркивания _:
const num1 = 1234567; const num2 = 123_4567; // число равное num1 const num3 = 1234567890; const num4 = 12_3456_7890; // число равное num3
Тип BigInt добавлен в последних стандартах JavaScript для представления очень больших целых чисел, которые выходят за пределы диапазона типа number. Это не значит, что мы не можем совсем работать с большими числами с помощью типа number, но работа с ними в случае с типом number будет сопряжена с проблемами. Рассмотрим небольшой пример:
let num = 9007199254740991 console.log(num); // 9007199254740991 console.log(num + 1); // 9007199254740992 console.log(num + 2); // 9007199254740992
Здесь переменной num присваивается максимальное значение. И далее прибавляем к ней некоторые значения и выводим на консоль результат. И результаты могут нас смутить, особенно в случае прибавления числа 2.
Стоит отметить, что тип Number ограничен, хотя и позволяет оперировать довольно большим диапазоном чисел. В частности, мы можем использовать специальные константы
Number.MIN_VALUE
и Number.MAX_VALUE
для проверки минимального и максимального возможных значений для типа Number:
console.log(Number.MIN_VALUE); // 5e-324 console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
Например, рассмотрим следующий пример:
const num = 9223372036854775801; console.log(num); // 9223372036854776000
В силу ограничений типа Number на консоли мы увидим несколько другое число, нежели мы присвоили константе num. Это может негативно влиять на точность
в вычислениях. И для подобных подобных чисел как раз предназначен тип BigInt. Для определения числа как значения типа BigInt
в конце числа добавляется суффикс n:
let dimension = 19007n; const value = 2545n;
Например, изменим из предыдущего примера тип number на bigint:
const num = 9223372036854775801n; console.log(num); // 9223372036854775801n
Теперь консоль выводит корректный результат.
Тип Boolean представляет булевые или логические значения true (верно) и false (ложно):
const isAlive = true; const isDead = false;
Тип String
представляет строки. Для определения строк применяются кавычки, причем, можно использовать как двойные, так одинарные, так и косые кавычки.
Единственно ограничение: тип закрывающей кавычки должен быть тот же, что и тип открывающей, то есть либо обе двойные, либо обе одинарные.
const user = "Tom"; const company = 'Microsoft'; const language = `JavaScript`; console.log(user); console.log(company); console.log(language);
Если внутри строки встречаются кавычки, то мы их должны экранировать слешем. Например, пусть у нас есть текст "Бюро "Рога и копыта""
.
Теперь экранируем кавычки:
const company = "Бюро \"Рога и копыта\"";
Также мы можем внутри стоки использовать другой тип кавычек:
const company1 = "Бюро 'Рога и копыта'"; const company2 = 'Бюро "Рога и копыта"';
Также строка может содержать специальные символы - управляющие последовательности, которые интерпретируются определенным образом. Самые распространенные последовательности - это "\n" (перевод на другую строку) и "\t" (табуляция). Например:
const text = "Hello METANIT.COM\nHello\tWorld"; console.log(text);
При выводе на консоль текст из константы text будет интерпретироваться следующим образом:
Hello METANIT.COM Hello World
Использование косых кавычек позволяет нам применять такой прием как интерполяция - встраивать данные в строку. Например:
const user = "Tom"; const text = `Name: ${user}`; console.log(text); // Name: Tom
Для встраивания значений выражений (например, значений других переменных и констант) в строку перед выражением ставится знак доллара $, после которого в фигурных скобках
указывается выражение. Так, в примере выше ${user}
означает, что в этом месте строки надо встроить значение переменной user
.
Подобным образом можно встраивать и больше количество данных:
const user = "Tom"; const age = 37; const isMarried = false; const text = `Name: ${user} Age: ${age} IsMarried: ${isMarried}`; console.log(text); // Name: Tom Age: 37 IsMarried: false
Кроме интерполяции косые кавычки позволяют определять многострочный текст:
const text = `Мы все учились понемногу Чему-нибудь и как-нибудь, Так воспитаньем, слава богу, У нас немудрено блеснуть.`; console.log(text);
Консольный вывод браузера:
Мы все учились понемногу Чему-нибудь и как-нибудь, Так воспитаньем, слава богу, У нас немудрено блеснуть.
undefined указывает, что значение не определено или не установлено. Например, когда мы только определяем переменную без присвоения ей начального значения, она представляет тип undefined:
let email; console.log(email); // выведет undefined
Присвоение значение null означает, что у переменной отсутствует значение:
let email; console.log(email); // undefined email = null; console.log(email); // null
Стоит отметить, что хотя в принципе можно переменной присвоить значение undefined
, как в следующем случае:
let email = "tome@mimimail.com"; email = undefined; // установим тип undefined console.log(email); // undefined
Но основной смысл undefined состоит в том, что переменная неинициализирована, что обычно происходит до первого присвоения ей какого-либо значения. Поэтому обычно не предполагается, что
переменной явным образом будет присваиваться значение undefined
. В тоже время этот тип может быть полезен - мы можем использовать его на проверку
инициализации переменной. Но если же нам надо указать, что у переменной нет никакого значения, то ей присваивается null
, а не undefine
.
Тип object
представляет сложный объект. Простейшее определение объекта представляют фигурные скобки:
const user = {};
Объект может иметь различные свойства и методы:
const user = {name: "Tom", age:24}; console.log(user.name);
В данном случае объект называется user, и он имеет два свойства: name и age, которые в качестве значения принимают данные других типов. Это краткое описание объектов, более подробно объекты мы рассморим в последующих статьях.
JavaScript является языком со слабой и динамической типизацией. Это значит, что переменные могут динамически менять тип. Например:
let id; // тип undefined console.log(id); id = 45; // тип number console.log(id); id = "45"; // тип string console.log(id);
Несмотря на то, что во втором и третьем случае консоль выведет нам число 45, но во втором случае переменная id
будет представлять число, а в третьем случае - строку.
С помощью оператора typeof можно получить тип переменной, что может быть полезно, когда в зависимости от типа переменной необходимо выполнить те или иные действия:
let id; console.log(typeof id); // undefined id = 45; console.log(typeof id); // number id = 45n; console.log(typeof id); // bigint id = "45"; console.log(typeof id); // string
Стоит отметить, что для значения null оператор typeof
возвращает значение "object", несмотря на то, что согласно спецификации
JavaScript значение null представляет отдельный тип.