Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/types.

В JavaScript существует несколько основных типов данных.

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

Число «number»

Единый тип число используется как для целых, так и для дробных чисел.

Существуют специальные числовые значения Infinity (бесконечность) и NaN (ошибка вычислений).

Например, бесконечность Infinity получается при делении на ноль:

Ошибка вычислений NaN будет результатом некорректной математической операции, например:

Эти значения формально принадлежат типу «число», хотя, конечно, числами в их обычном понимании не являются.

Особенности работы с числами в JavaScript разобраны в главе Числа.

Строка «string»

В JavaScript одинарные и двойные кавычки равноправны. Можно использовать или те или другие.

В некоторых языках программирования есть специальный тип данных для одного символа. Например, в языке С это char . В JavaScript есть только тип «строка» string . Что, надо сказать, вполне удобно.

Более подробно со строками мы познакомимся в главе Строки.

Булевый (логический) тип «boolean»

У него всего два значения: true (истина) и false (ложь).

Как правило, такой тип используется для хранения значения типа да/нет, например:

О нём мы поговорим более подробно, когда будем обсуждать логические вычисления и условные операторы.

Специальное значение «null»

Значение null не относится ни к одному из типов выше, а образует свой отдельный тип, состоящий из единственного значения null :

В JavaScript null не является «ссылкой на несуществующий объект» или «нулевым указателем», как в некоторых других языках. Это просто специальное значение, которое имеет смысл «ничего» или «значение неизвестно».

В частности, код выше говорит о том, что возраст age неизвестен.

Специальное значение «undefined»

Значение undefined , как и null , образует свой собственный тип, состоящий из одного этого значения. Оно имеет смысл «значение не присвоено».

Если переменная объявлена, но в неё ничего не записано, то её значение как раз и есть undefined :

Можно присвоить undefined и в явном виде, хотя это делается редко:

В явном виде undefined обычно не присваивают, так как это противоречит его смыслу. Для записи в переменную «пустого» или «неизвестного» значения используется null .

Объекты «object»

Первые 5 типов называют «примитивными».

Особняком стоит шестой тип: «объекты».

Он используется для коллекций данных и для объявления более сложных сущностей.

Объявляются объекты при помощи фигурных скобок <. >, например:

Мы подробно разберём способы объявления объектов и, вообще, работу с объектами, позже, в главе Объекты.

Оператор typeof

Оператор typeof возвращает тип аргумента.

У него есть два синтаксиса: со скобками и без:

  1. Синтаксис оператора: typeof x .
  2. Синтаксис функции: typeof(x) .

Работают они одинаково, но первый синтаксис короче.

Результатом typeof является строка, содержащая тип:

Последние две строки помечены, потому что typeof ведёт себя в них по-особому.

  1. Результат typeof null == "object" – это официально признанная ошибка в языке, которая сохраняется для совместимости. На самом деле null – это не объект, а отдельный тип данных.
  2. Функции мы пройдём чуть позже. Пока лишь заметим, что функции не являются отдельным базовым типом в JavaScript, а подвидом объектов. Но typeof выделяет функции отдельно, возвращая для них "function" . На практике это весьма удобно, так как позволяет легко определить функцию.

К работе с типами мы также вернёмся более подробно в будущем, после изучения основных структур данных.

Итого

Есть 5 «примитивных» типов: number , string , boolean , null , undefined и 6-й тип – объекты object .

Очень скоро мы изучим их во всех деталях.

Оператор typeof x позволяет выяснить, какой тип находится в x , возвращая его в виде строки.

Переменная — это поименованная область памяти, хранящая данные. Как и в любом языке программирования, переменные JavaScript похожи на контейнера. Этим контейнерам можно присваивать имена и впоследствии использовать их для извлечения и изменения хранимых данных.

Объявление переменных

Прежде чем использовать переменную в JavaScript, ее необходимо объявить. Для объявления или, другими словами, создания переменной используется ключевое слово var (от variable — переменная):

Переменной, объявляемой с помощью ключевого слова var , можно присвоить начальное значение (это называется инициализацией переменной):

Значение переменной сохраняется в соответствующей области памяти и в дальнейшем доступ к нему осуществляется при обращении по имени. Если же переменную не инициализировать, то ее начальное значение остается неопределенным undefined :

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

JavaScript – это нетипизированный язык. Это означает, что переменная JavaScript может содержать значение любого типа, в отличие от Java- или C-переменной, в которой может содержаться только определенный тип данных, заданный при ее объявлении.
Так, в JavaScript можно присвоить переменной число, а затем присвоить той же переменной строку. Тип значения переменной может меняться во время выполнения программы, и JavaScript позаботится об этом автоматически.

Значение в переменной можно изменять сколько угодно раз:

При объявлении можно инициализировать переменную, а затем скопировать значение переменной в новую переменную.

Когда одна переменная с примитивным значением присваивается другой, создается копия значения, хранящегося в ячейке памяти, а затем она записы­вается по адресу другой переменной, например:

Здесь msg1 содержит строковое значение "Строка". Когда переменная msg2 инициализируется значе­нием переменной msg1 , она также получает значение "Строка". ТОеперь переменная msg2 никак не связана с msg1 , потому что содержит копию значения.
В дальнейшем эти переменные можно использовать по отдель­ности без побочных эффектов для скрипта.

Имена переменных

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

  • буква в верхнем или нижнем регистре;
  • символ подчеркивания _ ;
  • знак доллара $ .

Вслед за первым символом имени переменной можно использовать последовательность букв, цифр и символа подчеркивания без пробелов и знаков препинания. Поскольку JavaScript чувствителен к регистру, буквы включают символы от "A" до "Z" (верхний регистр) и символы от "a" до "z" (нижний регистр). Вы можете использовать буквы ISO 8859-1 или Unicode, например, å или ü.

Примеры правильных имен переменных:

Примеры неправильных имен переменных:

При выборе имен переменных нельзя использовать ключевые слова, то есть слова, используемые в определениях конструкций языка. Например, нельзя выбирать слова var , return , class , const , true , false , function , super , switch и ряд других.

Например, следующий сценарий выдаст синтаксическую ошибку:

Имя переменной должно быть понятным и максимально чётко соответствовать хранимым в ней данным.

Существуют проверенные опытом правила именования перемененных:

  • Имена, состоящие из одной буквы, равно как и имена, не несущие смысловой нагрузки можно применять только в том случае, если они используются в небольшом фрагменте кода и их применение очевидно.
  • Используйте составные имена из нескольких слов, чтобы как можно точнее описать назначение переменных.
    Возможны два способа объединения слов для создания имени: использование «верблюжьей нотации» (англ. camelCase) или запись слов через символ подчеркивания. Обычно применяют первый из них.
  • При выборе имен применяйте только английский язык, т.к. среди разработчиков всего мира принято использовать английский язык для имён переменных.

Область видимости переменной

Как и в других языках программирования, в JavaScript существуют локальные и глобальные переменные. Ключевую роль здесь играет понятие области видимости переменной. Область видимости (scope) переменной — это та часть программы, для которой эта переменная определена.

В JavaScript существует два типа области видимости:

  • Глобальные переменные имеют глобальную область видимости – они могут использоваться в любом месте программы, а также в вызываемых программах из других файлов.
  • Локальные переменные имеют локальную область видимости — это переменные, определенные только в коде функции с помощью ключевого слова var либо только в рамках блока <. >, в котором объявлена переменная с помощью ключевого слова let .

Внутри тела функции локальная переменная имеет преимущество перед глобальной переменной с тем же именем:

Функция Number() преобразует в тип Number, String() в тип String, Boolean() в тип Boolean.

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

В JavaScript существует 5 типов данных, которые могут содержать значения:

Есть 3 типа объектов:

И 2 типа данных, которые не могут содержать значения:

Оператор typeof

Чтобы определить тип переменной JavaScript, используется оператор typeof.

  • У NaN тип number
  • У массива тип object
  • У даты тип object
  • У null тип object
  • У неопределенной переменной тип undefined *
  • У переменной, которой не присвоено значение, тоже тип undefined *

Нельзя при помощи оператора typeof определить, является ли объект JavaScript массивом (или датой).

Оператор typeof это не переменная. Это оператор. У операторов ( + — * / ) нет типов. Однако оператор typeof всегда возвращает строку (содержащую тип операнда).

Свойство constructor

Свойство constructor возвращает функцию-конструктор у всех переменных JavaScript.

Вы можете проверить свойство constructor, чтобы определить, является ли объект массивом (содержит слово "Array"):

Или еще проще, вы можете проверить, является ли объект функцией Array:

Аналогичным образом можно проверить является ли переменная объектом Date.

Преобразование типов в JavaScript

Переменные JavaScript могут быть преобразованы в новые переменные и другие типы данных:

  • при помощи функции JavaScript
  • автоматически самим JavaScript

Преобразование чисел в строки

Глобальный метод String() позволяет преобразовывать числа в строки.

Его можно использовать с любыми видами чисел — константами, переменными или выражениями:

Метод toString() объекта Number делает то же самое.

В главе Методы объекта Number вы найдете другие методы, которые можно использовать для преобразования чисел в строки:

МетодОписание
toExponential()Возвращает строку с округленным числом, записанным в экспоненциальной нотации.
toFixed()Возвращает строку с числом, записанным с заданным количеством цифр после десятичной точки.
toPrecision()Возвращает строку с числом заданной длины.

Преобразование логических значений (тип Boolean) в строку

Глобальный метод String() позволяет преобразовывать логические значения в строки.

Метод toString() объекта Boolean делает то же самое.

Преобразование даты (тип Date) в строку

Глобальный метод String() позволяет преобразовывать дату (тип Date) в строку.

Метод toString() объекта Date делает то же самое.

В главе Методы объекта Date вы найдете другие методы, которые можно использовать для преобразования даты в строку:

МетодОписание
getFullYear()Получить год в формате четырех цифр (гггг)
getMonth()Получить номер месяца (0-11)
getDate()Получить число месяца (1-31)
getHours()Получить час (0-23)
getMinutes()Получить минуты (0-59)
getSeconds()Получить секунды (0-59)
getMilliseconds()Получить миллисекунды (0-999)
getTime()Получить время (количество миллисекунд, прошедших с 1 января 1970)
getDay()Получить номер дня недели (0-6)

Преобразование строк в числа

Глобальный метод Number() позволяет преобразовывать строки в числа.

Строки, содержащие числа (как "3.14"), преобразовываются в числа (как 3.14). Пустые строки преобразовываются в 0. Все остальные строки преобразовываются в NaN (Не число).

В главе Методы объекта Number вы найдете другие методы, которые можно использовать для преобразования строк в числа:

МетодОписание
parseFloat()Парсит строку и возвращает число с плавающей точкой.
parseInt()Парсит строку и возвращает целое число.

Унарный оператор +

Унарный оператор + также можно использовать для преобразования переменных в числовой тип:

Если переменная не может быть преобразована, то она все равно станет числом, но со значением NaN (Не число):

Преобразование логических значений (тип Boolean) в число

Глобальный метод Number() позволяет преобразовывать логические значения в числа.

Преобразование даты (тип Date) в число

Глобальный метод Number() позволяет преобразовывать значения даты (тип Date) в числа.

Метод getTime() объекта Date делает то же самое.

Автоматическое преобразование типов

Когда JavaScript приходится оперировать с "неправильным" типом данных, интерпретатор попытается преобразовать тип этого значения в "правильный".

Результат получается не всегда таким, как вы ожидаете:

Автоматическое преобразование строк

JavaScript автоматически вызывает метод переменной toString(), когда вы пытаетесь "вывести" объект или переменную:

Числа и логические значения также преобразуются, но это не так заметно:

Таблица преобразования типов JavaScript

В следующей таблице показаны результаты преобразования различных значений JavaScript в типы Number, String и Boolean:

Оригинальное значениеПреобразованное в NumberПреобразованное в StringПреобразованное в Boolean
false0"false"false
true1"true"true
00"0"false
11"1"true
"0"0"0"true
"000"0"000"true
"1"1"1"true
NaNNaN"NaN"false
InfinityInfinity"Infinity"true
-Infinity-Infinity"-Infinity"true
""0""false
"20"20"20"true
"twenty"NaN"twenty"true
[]0""true
[20]20"20"true
[10,20]NaN"10,20"true
["twenty"]NaN"twenty"true
["ten","twenty"]NaN"ten,twenty"true
function()<>NaN"function()<>"true
NaN"[object Object]"true
null0"null"false
undefinedNaN"undefined"false

Значения в кавычках показывают строковые значения.

Красным цветом выделены значения, которые не всегда ожидаемы.