Типы данных в основном определяют, какие данные могут храниться и обрабатываться в программе.
В JavaScript существует шесть основных типов данных, которые можно разделить на три основные категории: примитивные (или первичные), составные (или ссылочные) и специальные типы данных. String
, Number
и Boolean
являются примитивными типами данных. Object
, Array
и Function
(все типы объектов) являются составными типами данных. Тогда как Undefined
и Null
являются специальными типами данных.
Примитивные типы данных могут содержать только одно значение, тогда как составные типы данных могут содержать массивы значений и более сложные объекты. Давайте обсудим каждый из них подробно.
Тип данных String
Строковый тип данных используется для представления текстовых данных (то есть последовательности символов). Строки создаются с использованием одинарных или двойных кавычек, окружающих один или несколько символов, как показано ниже:
var a = 'Hi there!'; // используя одинарные кавычки
var b = "Hi there!"; // используя двойные кавычки
Вы можете включать кавычки в строку, если они не соответствуют вмещающим кавычкам.
var a = "Let's have a cup of coffee."; // одинарная кавычка внутри двойных кавычек
var b = 'He said "Hello" and left.'; // двойные кавычки внутри одинарных кавычек
var c = 'We\'ll never give up.'; // эскейпим кавычку обратным слешем
Вы узнаете больше о строках в Руководстве по типу данных String в JavaScript.
Тип данных Number
Числовой тип данных используется для представления положительных или отрицательных чисел с десятичным знаком или без него или чисел, написанных с использованием экспоненциальной записи, например 1.5e-4 (эквивалентно 1.5×10-4).
var a = 25; // integer
var b = 80.5; // floating-point number
var c = 4.25e+6; // exponential notation, same as 4.25e6 or 4250000
var d = 4.25e-6; // exponential notation, same as 0.00000425
Тип данных Number также включает некоторые специальные значения: Infinity
, -Infinity
и NaN
. Бесконечность представляет математическую бесконечность ∞
, которая больше любого числа. Бесконечность — это результат деления ненулевого числа на 0
, как показано ниже:
alert(16 / 0); // Выводит: Infinity
alert(-16 / 0); // Выводит: -Infinity
alert(16 / -0); // Выводит: -Infinity
В то время как NaN
представляет собой специальное значение Not-a-Number. Это результат неверной или неопределенной математической операции, такой как получение квадратного корня из -1
или деление 0
на 0
и т. д.
alert("Some text" / 2); // Выводит: NaN
alert("Some text" / 2 + 10); // Выводит: NaN
alert(Math.sqrt(-1)); // Выводит: NaN
Вы узнаете больше о числах в Руководстве по типу данных Number в JavaScript.
Тип данных Boolean
Тип данных Boolean может содержать только два значения: true
или false
. Обычно он используется для хранения таких значений, как yes (true
) или no (false
), on (true
) или off (false
) и т. д., как показано ниже:
var isReading = true; // yes, I'm reading
var isSleeping = false; // no, I'm not sleeping
Логические значения также появляются в результате сравнений в программе. В следующем примере сравниваются две переменные и показывает результат в диалоговом окне предупреждения:
var a = 2, b = 5, c = 10;
alert(b > a) // Выводит: true
alert(b > c) // Выводит: false
Вы узнаете больше о сравнениях в Руководстве по операторам if…else в JavaScript.
Тип данных Undefined
Неопределенный тип данных может иметь только одно значение — специальное значение undefined
. Если переменная была объявлена, но ей не было присвоено значение, она имеет значение undefined
.
var a;
var b = "Hello World!"
alert(a) // Выводит: undefined
alert(b) // Выводит: Hello World!
Тип данных Null
Это еще один специальный тип данных, который может иметь только одно значение — null
. Нулевое значение означает, что значения нет. Это не эквивалентно пустой строке (""
) или 0
, это просто ничто.
Переменная может быть явно очищена от ее текущего содержимого, присваивая ей нулевое значение.
var a = null;
alert(a); // Выводит: null
var b = "Hello World!"
alert(b); // Выводит: Hello World!
b = null;
alert(b) // Выводит: null
Тип данных Object
Объект представляет собой сложный тип данных, который позволяет хранить коллекции данных.
Объект содержит свойства, определенные как пара ключ-значение. Ключ свойства (имя) всегда является строкой, но значением может быть любой тип данных, например строки, числа, логические значения или сложные типы данных, такие как массивы, функции и другие объекты. Вы узнаете больше об объектах в следующих главах.
Следующий пример покажет вам самый простой способ создания объекта в JavaScript.
var emptyObject = {};
var person = {"name": "Clark", "surname": "Kent", "age": "36"};
// For better reading
var car = {
"modal": "BMW X3",
"color": "white",
"doors": 5
}
Вы можете опустить кавычки вокруг имени свойства, если имя является допустимым именем JavaScript. Это означает, что кавычки обязательны для имени "first-name"
, но не обязательны для имени firstname
. Таким образом, объект car
в приведенном выше примере также может быть записан как:
var car = {
modal: "BMW X3",
color: "white",
doors: 5
}
Вы узнаете больше об объектах в Руководстве по объектам JavaScript.
Тип данных Array
Массив — это тип объекта, используемый для хранения нескольких значений в одной переменной. Каждое значение (также называемое элементом) в массиве имеет числовую позицию, известную как его индекс; он может содержать данные любых типов данных: числа, строки, логические значения, функции, объекты и даже другие массивы. Индекс массива начинается с 0
, поэтому первым элементом массива является arr[0]
, а не arr[1]
.
Самый простой способ создать массив — указать элементы массива в виде списка через запятую, заключенного в квадратные скобки, как показано в примере ниже:
var colors = ["Red", "Yellow", "Green", "Orange"];
var cities = ["London", "Paris", "New York"];
alert(colors[0]); // Выводит: Red
alert(cities[2]); // Выводит: New York
Вы узнаете больше о массивах в Руководстве по массивам JavaScript.
Тип данных Function
Функция является вызываемым объектом, который выполняет блок кода. Поскольку функции являются объектами, их можно назначать переменным, как показано в примере ниже:
var greeting = function(){
return "Hello World!";
}
// Check the type of greeting variable
alert(typeof greeting) // Выводит: function
alert(greeting()); // Выводит: Hello World!
Фактически, функции могут использоваться в любом месте, где может использоваться любое другое значение. Функции могут храниться в переменных, объектах и массивах. Функции могут быть переданы в качестве аргументов другим функциям и функции могут быть возвращены из функций. Рассмотрим следующую функцию:
function createGreeting(name){
return "Hello, " + name;
}
function displayGreeting(greetingFunction, userName){
return greetingFunction(userName);
}
var result = displayGreeting(createGreeting, "Peter");
alert(result); // Выводит: Hello, Peter
Вы узнаете больше о функциях в Руководстве по функциям JavaScript.
Оператор typeof
Оператор typeof
может использоваться для определения типа данных, содержащихся в переменной или операторе. Может использоваться с круглыми скобками или без них (typeof(x)
или typeof x
).
Оператор typeof
особенно полезен в ситуациях, когда вам нужно обрабатывать значения разных типов по-разному, но вы должны быть очень осторожны, поскольку в некоторых случаях он может привести к неожиданному результату, как показано в следующем примере:
// Numbers
typeof 15; // Возвращает: "number"
typeof 42.7; // Возвращает: "number"
typeof 2.5e-4; // Возвращает: "number"
typeof Infinity; // Возвращает: "number"
typeof NaN; // Возвращает: "number". Despite being "Not-A-Number"
// Strings
typeof ''; // Возвращает: "string"
typeof 'hello'; // Возвращает: "string"
typeof '12'; // Возвращает: "string". Number within quotes is typeof string
// Booleans
typeof true; // Возвращает: "boolean"
typeof false; // Возвращает: "boolean"
// Undefined
typeof undefined; // Возвращает: "undefined"
typeof undeclaredVariable; // Возвращает: "undefined"
// Null
typeof Null; // Возвращает: "object"
// Objects
typeof {name: "John", age: 18}; // Возвращает: "object"
// Arrays
typeof [1, 2, 4]; // Возвращает: "object"
// Functions
typeof function(){}; // Возвращает: "function"
Как вы можете ясно видеть в приведенном выше примере, когда мы тестируем нулевое значение null
с помощью оператора typeof
(строка № 22), он возвращает object
вместо null
.
Это давняя ошибка в JavaScript, но так как множество кода в сети, написано учитывая это поведения обратную совместимость уже написать невозможно.