Типы данных

Последнее обновление: 23.10.2023

Все используемые данные в javascript имеют определенный тип. В JavaScript имеется восемь типов данных:

  • String: представляет строку

  • Number: представляет числовое значение

  • BigInt: предназначен для представления очень больших целых чисел

  • Boolean: представляет логическое значение true или false

  • Undefined: представляет одно специальное значение - undefined и указывает, что значение не установлено

  • Null: представляет одно специальное значение - null и указывает на отсутствие значения

  • Symbol: представляет уникальное значение, которое часто применяется для обращения к свойствам сложных объектов

  • Object: представляет комплексный объект

Первые семь типов представляют примитивные типы данных. Последний тип - Object представляет сложный, комплексный тип данных, который состоит из значений примитивных типов или других объектов. Рассмотрим основные примитивные типы данных.

Числовые данные

Number

Тип 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

Тип 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

Тип Boolean представляет булевые или логические значения true (верно) и false (ложно):

const isAlive = true;
const isDead = false;

Строки String

Тип 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);

Консольный вывод браузера:

Мы все учились понемногу
Чему-нибудь и как-нибудь,
Так воспитаньем, слава богу,
У нас немудрено блеснуть.

null и undefined

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

Тип 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

С помощью оператора 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 представляет отдельный тип.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850