Значение в JavaScript всегда относится к данным определённого типа. Например, это может быть строка или число.
Есть восемь основных типов данных в JavaScript. В этой главе мы рассмотрим их в общем, а в следующих главах поговорим подробнее о каждом.
Переменная в JavaScript может содержать любые данные. В один момент там может быть строка, а в другой – число:
1 |
// Не будет ошибкой |
2 |
let message = "hello"; |
3 |
message = 123456; |
Языки программирования, в которых такое возможно, называются «динамически типизированными». Это значит, что типы данных есть, но переменные не привязаны ни к одному из них.
1 |
let n = 123; |
2 |
n = 12.345; |
Числовой тип данных (number ) представляет как целочисленные значения, так и числа с плавающей точкой.
Существует множество операций для чисел, например, умножение * , деление / , сложение + , вычитание - и так далее.
Кроме обычных чисел, существуют так называемые «специальные числовые значения», которые относятся к этому типу данных: Infinity , -Infinity и NaN .
-
Infinity представляет собой математическую бесконечность ∞. Это особое значение, которое больше любого числа.
Мы можем получить его в результате деления на ноль:
1 |
alert( 1 / 0 ); // Infinity |
index.HTML
<!DOCTYPE html>
<script>
"use strict";
alert( 1 / 0 ); // Infinity
alert( 1 / 0 ); // Infinity
|
Или задать его явно:
1 |
alert( Infinity ); // Infinity |
Index.html
<!DOCTYPE html>
<script>
"use strict";
alert( Infinity ); // Infinity
</script>
|
NaN означает вычислительную ошибку. Это результат неправильной или неопределённой математической операции, например:
1 |
alert( "не число" / 2 ); // NaN, такое деление является ошибкой |
Значение NaN «прилипчиво». Любая операция с NaN возвращает NaN :
1 |
alert( "не число" / 2 + 5 ); // NaN |
Если где-то в математическом выражении есть NaN , то результатом вычислений с его участием будет NaN .
Математические операции – безопасны
Математические операции в JavaScript «безопасны». Мы можем делать что угодно: делить на ноль, обращаться с нечисловыми строками как с числами и т.д.
Скрипт никогда не остановится с фатальной ошибкой (не «умрёт»). В худшем случае мы получим NaN как результат выполнения.
|
Специальные числовые значения относятся к типу «число». Конечно, это не числа в привычном значении этого слова.
Подробнее о работе с числами мы поговорим в главе Числа.
В JavaScript тип «number» не может содержать числа больше, чем (253-1) (т. е. 9007199254740991 ), или меньше, чем -(253-1) для отрицательных чисел. Это техническое ограничение вызвано их внутренним представлением.
Для большинства случаев этого достаточно. Но иногда нам нужны действительно гигантские числа, например, в криптографии или при использовании метки времени («timestamp») с микросекундами.
Тип BigInt был добавлен в JavaScript, чтобы дать возможность работать с целыми числами произвольной длины.
Чтобы создать значение типа BigInt , необходимо добавить n в конец числового литерала:
// символ "n" в конце означает, что это BigInt
const bigInt = 1234567890123456789012345678901234567890n;
Так как BigInt -числа нужны достаточно редко, мы рассмотрим их в отдельной главе BigInt. Ознакомьтесь с ней, когда вам понадобятся настолько большие числа.
Поддержка
В данный момент BigInt поддерживается только в браузерах Firefox, Chrome, Edge и Safari, но не поддерживается в IE.
|
Строка (string ) в JavaScript должна быть заключена в кавычки.
1 |
let str = "Привет"; |
2 |
let str2 = 'Одинарные кавычки тоже подойдут'; |
3 |
let phrase = `Обратные кавычки позволяют встраивать переменные ${str}`; |
В JavaScript существует три типа кавычек.
- Двойные кавычки:
"Привет" .
- Одинарные кавычки:
'Привет' .
- Обратные кавычки:
`Привет` .
Двойные или одинарные кавычки являются «простыми», между ними нет разницы в JavaScript.
Обратные же кавычки имеют расширенную функциональность. Они позволяют нам встраивать выражения в строку, заключая их в ${…} . Например:
1 |
let name = "Иван"; |
2 |
|
3 |
// Вставим переменную |
4 |
alert( `Привет, ${name}!` ); // Привет, Иван! |
5 |
|
6 |
// Вставим выражение |
7 |
alert( `результат: ${1 + 2}` ); // результат: 3 |
Выражение внутри ${…} вычисляется, и его результат становится частью строки. Мы можем положить туда всё, что угодно: переменную name , или выражение 1 + 2 , или что-то более сложное.
Обратите внимание, что это можно делать только в обратных кавычках. Другие кавычки не имеют такой функциональности встраивания!
1 |
alert( "результат: ${1 + 2}" ); // результат: ${1 + 2} (двойные кавычки ничего не делают) |
|
<!DOCTYPE html>
<script>
"use strict";
alert( "результат: ${1 + 2}" ); // результат: ${1 + 2} (двойные кавычки ничего не делают)
</script>
|
Мы рассмотрим строки более подробно в главе Строки.
Нет отдельного типа данных для одного символа.
В некоторых языках, например C и Java, для хранения одного символа, например "a" или "%" , существует отдельный тип. В языках C и Java это char .
В JavaScript подобного типа нет, есть только тип string . Строка может содержать ноль символов (быть пустой), один символ или множество.
|
В JavaScript есть 8 основных типов.
number для любых чисел: целочисленных или чисел с плавающей точкой; целочисленные значения ограничены диапазоном ±(253-1) .
bigint для целых чисел произвольной длины.
string для строк. Строка может содержать ноль или больше символов, нет отдельного символьного типа.
boolean для true /false .
null для неизвестных значений – отдельный тип, имеющий одно значение null .
undefined для неприсвоенных значений – отдельный тип, имеющий одно значение undefined .
object для более сложных структур данных.
symbol для уникальных идентификаторов.
Оператор typeof позволяет нам увидеть, какой тип данных сохранён в переменной.
- Имеет две формы:
typeof x или typeof(x) .
- Возвращает строку с именем типа. Например,
"string" .
- Для
null возвращается "object" – это ошибка в языке, на самом деле это не объект.
|