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

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

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

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

  • string
  • number
  • boolean
  • object
  • function

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

  • Object
  • Date
  • Array

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

  • null
  • undefined

Оператор typeof

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


typeof "John"                 // Возвращает "string" 
typeof 3.14                   // Возвращает "number"
typeof NaN                    // Возвращает "number"
typeof false                  // Возвращает "boolean"
typeof [1,2,3,4]              // Возвращает "object"
typeof {name:'John', age:34}  // Возвращает "object"
typeof new Date()             // Возвращает "object"
typeof function () {}         // Возвращает "function"
typeof myCar                  // Возвращает "undefined" *
typeof null                   // Возвращает "object" 

Обратите внимание:

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

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

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

Свойство constructor

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


"John".constructor                // Возвращает функцию String()  {[машинный код]}
(3.14).constructor                // Возвращает функцию Number()  {[машинный код]}
false.constructor                 // Возвращает функцию Boolean() {[машинный код]}
[1,2,3,4].constructor             // Возвращает функцию Array()   {[машинный код]}
{name:'John',age:34}.constructor  // Возвращает функцию Object()  {[машинный код]}
new Date().constructor            // Возвращает функцию Date()    {[машинный код]}
function () {}.constructor        // Возвращает функцию Function(){[машинный код]}

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


function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
} 

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


function isArray(myArray) {
    return myArray.constructor === Array;
} 

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

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

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

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

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

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

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


String(x)         // преобразовывает строку числовую переменную x
String(123)       // преобразовывает строку константу 123
String(100 + 23)  // преобразовывает строку результат выражения 

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


x.toString()
(123).toString()
(100 + 23).toString() 

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

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

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

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


String(false)        // возвращает "false"
String(true)         // возвращает "true" 

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


false.toString()     // возвращает "false"
true.toString()      // возвращает "true" 

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

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


String(Date())

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


Date().toString()

В главе Методы объекта 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("3.14")    // возвращает 3.14
Number(" ")       // возвращает 0 
Number("")        // возвращает 0
Number("99 88")   // возвращает NaN 

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

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

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

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


var y = "5";      // y строка
var x = + y;      // x число

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


var y = "John";   // y строка
var x = + y;      // x число (NaN) 

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

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


Number(false)     // возвращает 0
Number(true)      // возвращает 1 

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

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


d = new Date();
Number(d)          // возвращает 1404568027739 

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


d = new Date();
d.getTime()        // возвращает 1404568027739 

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

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

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


5 + null    // возвращает 5, потому что null преобразуется в 0
"5" + null  // возвращает "5null", потому что null преобразуется в "null"
"5" + 2     // возвращает "52", потому что 2 преобразуется в "2"
"5" - 2     // возвращает 3, потому что "5" преобразуется в 5
"5" * "2"   // возвращает 10, потому что "5" и "2" преобразуется в 5 и 2 

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

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


document.getElementById("demo").innerHTML = myVar;

// if myVar = {name:"Fjohn"}  // toString преобразует в "[object Object]"
// if myVar = [1,2,3,4]       // toString преобразует в "1,2,3,4"
// if myVar = new Date()      // toString преобразует в "Fri Jul 18 2014 09:08:55 GMT+0200"

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


// if myVar = 123             // toString преобразует в "123"
// if myVar = true            // toString преобразует в "true"
// if myVar = false           // toString преобразует в "false" 

Таблица преобразования типов 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

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

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