САЙТ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ НА РУССКОМ ЯЗЫКЕ

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



Типы данных number преобразуется в число, string преобразуется в строку, boolean преобразуется в логическое значение.


JavaScript типы данных

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

  • string
  • number
  • boolean
  • object
  • function

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

  • Object
  • Date
  • Array
  • String
  • Number
  • Boolean

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

  • null
  • undefined

Оператор typeof

Вы можете использовать оператор typeof для вывода типа данных JavaScript переменных.

Пример

typeof "Андрей"               // Возвращается "string"
typeof 3.14                   // Возвращается "number"
typeof NaN                    // Возвращается "number"
typeof false                  // Возвращается "boolean"
typeof [1,2,3,4]               // Возвращается "object"
typeof {name:'Андрей', age:49}  // Возвращается "object"
typeof new Date()             // Возвращается "object"
typeof function () {}         // Возвращается "function"
typeof myCar                  // Возвращается "undefined" *
typeof null                   // Возвращается "object"
Редактор кода »

Пожалуйста, обратите внимание:

  • Тип данных NaN является числом
  • Тип данных array является объектом
  • Тип данных date является объектом
  • Тип данных null является объектом
  • Тип данных переменной undefined является неопределенно *
  • Тип данных переменной, которой не было присвоено значение тоже неопределенно *

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


Тип данных typeof

Оператор typeof не является переменной. Это оператор. Операторы + - * / не имеют никакого типа данных.

Но оператор typeof всегда возвращает строки (содержащие типы операнда).


Свойство constructor

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

Пример

"Андрей".constructor              // Возвращается функцию String()  {[native code]}
(3.14).constructor                // Возвращается функцию Number()  {[native code]}
false.constructor                 // Возвращается функцию Boolean() {[native code]}
[1,2,3,4].constructor            // Возвращается функцию Array()   {[native code]}
{name:'Андрей',age:49}.constructor // Возвращается функцию Object()  {[native code]}
new Date().constructor           // Возвращается функцию Date()    {[native code]}
function () {}.constructor        // Возвращается функцию Function(){[native code]}
Редактор кода »

Вы можете проверить свойством constructor, чтобы узнать, является ли функция isArray() массивом (содержащие слово "Array"):

Пример

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

Редактор кода »

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

Пример

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

Редактор кода »

Вы можете проверить свойством constructor, чтобы узнать, является ли функция isDate() датой (содержащие слово "Date")

Пример

function isDate(myDate) {
  return myDate.constructor.toString().indexOf("Date") > -1;
}

Редактор кода »

Или еще проще, вы можете проверить, является ли объектом Date:

Пример

function isDate(myDate) {
  return myDate.constructor === Date;
}

Редактор кода »


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

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

  • С помощью JavaScript функции
  • Автоматически с помощью JavaScript

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

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

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

Пример

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

Метод чисел toString() сделает тоже самое.

Пример

x.toString()
(123).toString()
(100 + 23).toString()
Редактор кода »

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

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

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

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

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

Логический метод toString() сделает тоже самое.

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

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

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

String(Date())  // возвращается "Thu Jul 17 2018 15:38:19 GMT+0200 (W. Europe Daylight Time)"

Метод получения дат toString() сделать тоже самое.

Пример

Date().toString()  // "Thu Jul 17 2018 15:38:19 GMT+0200 (W. Europe Daylight Time)"

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

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

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

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

Строка, содержащие число как ("3.14") преобразование в число как (3.14).

Пустые строки преобразуются в 0.

Все остальное преобразуется в NaN (Не число).

Number("3.14")    // возвращается 3.14
Number(" ")       // возвращается 0
Number("")        // возвращается 0
Number("99 88")   // возвращается NaN

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

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

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

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

Пример

var y = "5";     // y является строкой
var x = + y;      // x является числом
Редактор кода »

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

Пример

var y = "Андрей";  // y является строкой
var x = + y;      // x является числом (NaN)
Редактор кода »

Преобразование логических значений в числа

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

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

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

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

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

Метод дат getTime() сделает тоже самое.

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:"Андрей"}  // метод 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 в Числа, Строки и Булевы:

Оригинальные
Значения
Преобразованный
в Числа
Преобразованный
в Строки
Преобразованный
в Булевы
Редактор кода
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 Редактор кода »

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

Значения красным цветом указывают (некоторые) значения, для программистов это не ожиданно.