В этом руководстве вы узнаете о основных типах данных JavaScript и их уникальных характеристиках.
JavaScript имеет примитивные типы данных:
null
undefined
boolean
number
string
symbol
— доступен с ES2015bigint
— доступен с ES2020
и object
сложного типа данных.
JavaScript — это язык с динамической типизацией. Это означает, что переменная не связана с типом. Другими словами, переменная может содержать значения разных типов. Например:
let counter = 120; // counter is a number counter = false; // counter is now a boolean counter = "foo"; // counter is now a string
Чтобы получить текущий тип значения, которое хранит переменная, вы используете оператор typeof
:
let counter = 120; console.log(typeof(counter)); // "number" counter = false; console.log(typeof(counter)); // "boolean" counter = "Hi"; console.log(typeof(counter)); // "string"
Выход:
"number" "boolean" "string"
Неопределенный тип
undefined
тип — это примитивный тип, который имеет только одно значение undefined
. По умолчанию, когда переменная объявлена, но не инициализирована, ей присваивается значение undefined
.
Рассмотрим следующий пример:
let counter; console.log(counter); // undefined console.log(typeof counter); // undefined
В этом примере counter
является переменной. Поскольку counter
не был инициализирован, ему присваивается значение undefined
. Тип counter
также undefined
.
Важно отметить, что оператор typeof
также возвращает значение undefined
, когда вы вызываете его для переменной, которая не была объявлена:
console.log(typeof undeclaredVar); // undefined
Тип null
Тип null
— это второй примитивный тип данных, который также имеет только одно значение null
. Например:
let obj = null; console.log(typeof obj); // object
JavaScript определяет, что null
равно undefined
следующим образом:
console.log(null == undefined); // true
Тип number
JavaScript использует number
тип для представления как целых чисел, так и чисел с плавающей запятой.
Следующий оператор объявляет переменную и инициализирует ее значение целым числом:
let num = 100;
Чтобы представить число с плавающей запятой, вы включаете десятичную дробь, за запятой следует хотя бы одно число. Например:
let price= 12.5; let discount = 0.05;
Обратите внимание, что JavaScript автоматически преобразует число с плавающей запятой в целое число, если число кажется целым.
Причина в том, что Javascript всегда хочет использовать меньше памяти, поскольку значение с плавающей запятой использует вдвое больше памяти, чем целочисленное значение. Например:
let price = 200.00; // interpreted as an integer 200
Чтобы получить диапазон числового типа, вы используете Number.MIN_VALUE
и Number.MAX_VALUE
. Например:
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308 console.log(Number.MIN_VALUE); // 5e-324
Кроме того, вы можете использовать Infinity
и -Infinity
для представления бесконечного числа. Например:
console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinity console.log(-Number.MAX_VALUE - Number.MAX_VALUE); // -Infinity
NaN
NaN
означает не число. Это специальное числовое значение, указывающее на недопустимое число. Например, деление строки на число возвращает NaN
:.
console.log('a'/2); // NaN;
NaN
имеет две особенности:
- Любая операция с
NaN
возвращаетNaN
. NaN
не равно никакому значению, в том числе самому себе.
Пример:
console.log(NaN/2); // NaN console.log(NaN == NaN); // false
string
В JavaScript строка — это последовательность из нуля или более символов. Строковый литерал начинается и заканчивается либо одинарной кавычкой( '
), либо двойной кавычкой( "
).
Строка, начинающаяся с двойной кавычки, должна заканчиваться двойной кавычкой. Точно так же строка, начинающаяся с одинарной кавычки, также должна заканчиваться одинарной кавычкой:
let greeting = 'Hi'; let message = "Bye";
Если вы хотите использовать одинарную или двойную кавычку в литеральной строке, вам нужно использовать обратную косую черту, чтобы избежать ее. Например:
let message = 'I\'m also a valid string'; // use \ to escape the single quote(')
Строки JavaScript неизменяемы. Это означает, что ее нельзя изменить после создания. Однако вы можете создать новую строку из существующей строки. Например:
let str = 'JavaScript'; str = str + ' String';
В этом примере:
- Во-первых, объявите переменную
str
и инициализируйте ее строкой'JavaScript'
. - Во-вторых, используйте оператор
+
, чтобы объединить'JavaScript'
с' String'
чтобы сделать его значение'Javascript String'
.
В фоновом режиме механизм JavaScript создает новую строку, содержащую новую строку 'JavaScript String'
и уничтожает исходные строки 'JavaScript'
и ' String'
.
Тип boolean
boolean
тип имеет два буквальных значения: true
и false
в нижнем регистре. В следующем примере объявляются две переменные, содержащие логические значения.
let inProgress = true; let completed = false; console.log(typeof completed); // boolean
JavaScript позволяет преобразовывать значения других типов в логические значения true
или false
.
Чтобы преобразовать значение другого типа данных в логическое значение, вы используете функцию Boolean()
. В следующей таблице показаны правила преобразования:
Тип | true | false |
---|---|---|
string | непустая строка | пустая строка |
number | ненулевое число и бесконечность | 0, NaN |
object | ненулевой объект | нулевой |
undefined | неопределенный |
Пример:
console.log(Boolean('Hi'));// true console.log(Boolean('')); // false console.log(Boolean(20)); // true console.log(Boolean(Infinity)); // true console.log(Boolean(0)); // false console.log(Boolean({foo: 100})); // true on non-empty object console.log(Boolean(null));// false
symbol
В ES6 JavaScript добавил примитивный тип: symbol
. В отличие от других примитивных типов, тип symbol
не имеет буквенной формы.
Чтобы создать символ, вы вызываете функцию Symbol
следующим образом:
let s1 = Symbol();
Функция Symbol
создает новое уникальное значение каждый раз, когда вы ее вызываете.
console.log(Symbol() == Symbol()); // false
bigint
Тип bigint
представляет целые числа, которые больше 253 – 1. Чтобы сформировать литеральное число bigint
, вы добавляете букву n
в конце числа:
let pageView = 9007199254740991n; console.log(typeof(pageView)); // 'bigint'
Тип object
В JavaScript объект представляет собой набор свойств, где каждое свойство определяется как пара ключ-значение.
В следующем примере пустой объект определяется с использованием синтаксиса литерала объекта:
let emptyObject = {};
В следующем примере определяется объект person
с двумя свойствами: firstName
и lastName
.
let person = { firstName: 'John', lastName: 'Doe' };
Имя свойства объекта может быть любой строкой. Вы можете использовать кавычки вокруг имени свойства, если оно не является допустимым идентификатором.
Например, если у объекта person есть свойство first-name
, вы должны поместить его в кавычки, например "first-name"
.
Свойство объекта может содержать объект. Например:
let contact = { firstName: 'John', lastName: 'Doe', email: 'john.doe@example.com', phone: '(408)-555-9999', address: { building: '4000', street: 'North 1st street', city: 'San Jose', state: 'CA', country: 'USA' } }
Объект contact
имеет свойства firstName
, lastName
, email
, phone
и address
.
Свойство address
само по себе содержит объект, который имеет свойства building
, street
, city
, state
и country
.
Чтобы получить доступ к свойству объекта, вы можете использовать
- Точечное обозначение(
.
) - Обозначение, подобное массиву(
[]
).
В следующем примере используется запись через точку( .
) для доступа к свойствам firstName
и lastName
объекта contact
.
console.log(contact.firstName); console.log(contact.lastName);
Если вы ссылаетесь на несуществующее свойство, вы получите undefined
значение. Например:
console.log(contact.age); // undefined
В следующем примере нотация, подобная массиву, используется для доступа к свойствам email
и phone
объекта contact
.
console.log(contact['phone']); // '(408)-555-9999' console.log(contact['email']); // 'john.doe@example.com'
Заключение
- JavaScript имеет примитивные типы:
number
,string
,boolean
,null
,undefined
,symbol
иbigint
, а также сложный тип:object
.