Типы данных в JavaScript

Определение типа данных

В JavaScript для удобства работы и представления данных, классифицируют их на определенные типы. Так, например, различают тип данных "число" и тип данных "строка", каждый из них имеет свои собственные особенности и различия.

Далее, коротко рассмотрим все существующие типы данных в JavaScript.

Оператор typeof

Для того чтобы определить к какому типу данных относится то или иное значение, применяют оператор typeof единственным операндом, которого является идентификатор значения. Оператор typeof возвращает имя типа данных своего операнда.

typeof valueName

Простые типы данных

Числа

Число представляет собой последовательность цифр, которая находится в промежутке от 5e-324 (минимальное значение числа) до 1.7976931348623157e+308 (максимальное значение числа). Любое число меньшее чем 5e-324, автоматически преобразуется в число - 0 (нуль) (для отрицательных чисел в -0), а число большее чем 1.7976931348623157e+308 преобразуется в значение - Infinity (бесконечность) (для отрицательных чисел в -Infinity).

JavaScript не представляет отдельных типов данных для чисел (integer, float, double, long interger, ...), как например, это делают другие языки программирования (C++, Java). Все числа в Javascript представлены в виде одного единственного типа данных - number с размерностью 64 бит и всегда представляет из себя число с плавающей точкой (десятичная дробь).

Числа могут быть представлены как в десятичной, так и в шестнадцатеричной и восьмеричной системах счисления.

Также значения числа может быть записано в экспоненциальной форме.

Далее даны несколько примеров чисел в JavaScript.

Строки

Строкой в JavaScript называют любую последовательность символов, которая находится между двойными кавычками - "", одинарными кавычками  - '',  либо наклонными кавычками - . Каждый из видов кавычек абсолютно идентичны между собой, и выбор, какие кавычки  использовать, остается лишь вопросом вкуса и удобства, в отличии, например от языка PHP, где каждый из видов кавычек имеет дополнительную функциональность.

Для того чтобы использовать в строке слова, которые находятся в кавычках, нужно лишь использовать разные типы кавычек, например:  '"Строки" в JavaScript', или экранировать их с помощью символа - \, например: "\"Строки\" в JavaScript".

Ниже представлено несколько примеров значений строкового типа.

Логический тип данных

Данные логического типа могут принимать только два значения - true (истина) или false (ложь). Логический тип данных проще всего рассматривать как переключатель между двумя состояниями какой либо сущности, например из состояния включено в состояние выключено и наоборот. Логический тип данных часто используется при различных проверках значений.

Null и Undefined

Null и Undefined - это типы данных, которые говорят об отсутствии каких-либо значений вовсе. Undefined в отличии от null говорит об отсутствии значений на более высоком уровне.

Значение undefiend автоматически присваивается любой не инициализированной переменной, несуществующему элементу массива или свойству объекта, а также при отсутствии параметра в функции, когда она ожидает его получить при вызове и, если функция не возвращает никакого значения, то она
возвращает undefined.

Значения null и undefined не могут быть преобразованы ни к каким другим типам данных. В виду этого они не могут пройти проверку на истинность значений только если они не равны сами себе.

У null и undefined нет объектов-оберток, поэтому при вызове каких либо методов из этих значений Вы получите ошибку TypeError.

Тот факт, что оператор typeof для типа null возвращает тип данных object, является известной всем ошибкой в языке JavaScript. С выпуском новых спецификаций ECMAScript эту ошибку нарочно не исправляют, просто потому, что ее исправление заденет все ныне созданные проекты на JavaScript, и приведет их к нерабочему состоянию. На текущий момент, остается лишь принимать эту ошибку как данность.

Простые типы данных в роли объектных

Для того чтобы вызывать объектные методы из значений простых данных, необходимо эти значения привести к объектному типу. Для этого, в момент вызова объектного метода, автоматически вызывается конструктор для соответствующего типа данных, например: для числа 45 будет вызван конструктор Number(), а для строки "example" будет вызван конструктор String()

Вызванный конструктор создает для этого значения временный объект-обертку, далее вычисляется выражение и возвращается его результат, после которого объект-обертка само разрушается и значение возвращается к своему простому типу данных.

Объектные типы данных

Массивы

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

Для объявления массива используют квадратные скобки - [], внутри которых, через запятую, перечисляются его элементы.

В качестве элементов массива могут выступать литералы и переменные любых типов данных, в том числе и сами массивы. 

Каждый элемент массива имеет свой индекс (номер), по которому можно получить определенное значение. Индексация начинается с цифры - 0 (нуль). 

Объекты

Объект в JavaScritpt представляет собой список пар имя/значение. В качестве объекта может выступать любая сущность имеющая какие-либо свойства с тем или иным значением. Для инициализации объекта используют фигурные скобки - {}, внутри которых описывают свойства и методы, а также присваивают им значения.

В качестве свойств может выступать значение любого типа данных, если значением  свойства является функция, то такое свойство называется методом.

Свойства от значения отделяется знаком - :, каждое свойство объекта перечисляется через запятую.

Для получения значений свойств объекта - используют операторы доступа - . или []

Для примера создадим объект описывающий сущность - "Мотоцикл".

Функции

Под функцией  понимают некоторый отдельный блок кода, который, при помощи оператора вызова - (), может быть неоднократно выполнен в любом месте программы.

Для инициализации функции необходимо использовать ключевое слово - function, определить набор аргументов внутри скобок - (), если они есть, и указать тело функции внутри фигурных скобок - {}.

Для вызова функции, необходимо указать ее имя и аргументы в том месте программы, где она должна выполниться. 

Регулярные выражения

Регулярное выражение - это набор символов помещенных между двумя косыми чертами - / /, которые представляют собой шаблон для поиска соответствий среди определенного текста.

Преобразование типов данных

Благодаря динамической типизации в JavaScript, каждый из типов данных может быть преобразован в любой другой тип данных.

Преобразование одного типа данных в другой возможно несколькими способами. Далее кратко рассмотрим каждый из них.

Преобразование с помощью конструкторов.

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

Существует 4 конструктора для преобразования типов данных.

  • Number() - преобразование к числовому типу
  • String() - преобразование к строковому типу
  • Boolean() - преобразование к Булевому типу
  • RegExp() - преобразование к объектному типу "Регулярное выражение"

Важно обратить внимание, что вызов конструктора без оператора new - не переводит простой тип данных в объект явным образом в чем можно убедиться вызвав оператор typedef.

Преобразование с помощью глобальных функций

Преобразование простых типов (кроме null и undefined) к числам и строкам также возможно с использованием глобальных функций.

В примере ниже рассмотрены преобразования для каждой из доступных функций.

Преобразование с помощью унарных операторов

Некоторые унарные операторы такие как +, !, а также сложение с пустой строкой - "", можно использовать для преобразования типов данных.