Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице 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 возвращает тип аргумента.
У него есть два синтаксиса: со скобками и без:
- Синтаксис оператора: typeof x .
- Синтаксис функции: typeof(x) .
Работают они одинаково, но первый синтаксис короче.
Результатом typeof является строка, содержащая тип:
Последние две строки помечены, потому что typeof ведёт себя в них по-особому.
- Результат typeof null == "object" – это официально признанная ошибка в языке, которая сохраняется для совместимости. На самом деле null – это не объект, а отдельный тип данных.
- Функции мы пройдём чуть позже. Пока лишь заметим, что функции не являются отдельным базовым типом в 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 |
---|---|---|---|
false | 0 | "false" | false |
true | 1 | "true" | true |
0 | 0 | "0" | false |
1 | 1 | "1" | true |
"0" | 0 | "0" | true |
"000" | 0 | "000" | true |
"1" | 1 | "1" | true |
NaN | NaN | "NaN" | false |
Infinity | Infinity | "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 | |
null | 0 | "null" | false |
undefined | NaN | "undefined" | false |
Значения в кавычках показывают строковые значения.
Красным цветом выделены значения, которые не всегда ожидаемы.