01. Данные
Элементарные типы данных
![]() |
К элементарным типам данных относятся числа, строки и логические значения. |
Числа
25 // Пример литерала целого десятичного числа
0xaf // Пример литерала 16-ричного числа af (приставка 0x)
3.14 // Пример литерала вещественного числа с фиксированной точкой
2.12e25 // Пример литерала вещественного числа в экспоненциальной форме
Общий формат записи вещественных чисел:
[цифры][.цифры][(E|e)[(+|-)]цифры]
В этой формуле квадратные скобки обозначают необязательную часть, а круглые со знаком | внутри — выбор альтернативы.
JavaScript поддерживает 3 специальные (глобальные) числовые константы:
Infinity // Значение, большее наибольшего в языке числа
// ("плюс бесконечность")
-Infinity // Значение, меньшее самого маленького в языке числа
// (минус бесконечность)
NaN // Специальное значение "нечисло".
Пример использования -Infinity в функции, которая находит максимальное число в массиве:
function getMax(a)
{
var max = -Infinity;
for(var i=0; i<a.length; i++)
if(a[i]>max) max = a[i];
return max;
}
getMax([-5,3,6,0]); // Равно 6
getMax([-Infinity,Infinity,6,0]); // Равно Infinity
Здесь можно было, конечно, обойтись и без константы -Infinity. А вот здесь, она реально полезна:
1/y == Infinity // Равно true, если y равен нулю
-1/y == -Infinity // Равно true, если y равен нулю
Значение NaN необычно: по определению это числовое значение, которое обозначает «нечисло». Чему же равно NaN? Это неизвестно! Но оно не равно ни одному числу, в том числе и самому себе!
NaN == 10 // Равно false. Это понятно
NaN == NaN // Равно false. Круто!
Если мы хотим проверить, является ли содержимое переменной числом, бессмысленно записывать проверку в виде if(x != NaN). Значение x != NaN всегда, при любом x, будет равно true.
Для проверки на «нечисло» в языке существует специальная глобальная функция isNaN().
0/0 // Равно NaN
0/0 == NaN // Значение этого выражения есть false!
isNaN(0/0) // А это равно true
Класс Number содержит следующие полезные свойства-константы:
Number.MAX_VALUE // Максимально возможное число
Number.MIN_VALUE // Наименьшее (ближайшее к нулю) число
Number.NaN // Аналог глобального NaN
Number.POSITIVE_INFINITY // Аналог глобального Infinity
Number.NEGATIVE_INFINITY // Аналог глобального -Infinity
Заметим важную вещь: когда создаётся экземпляр класса Number (например, в виде обертки числового значения), перечисленные выше константы ему не передаются. Это означает, что нельзя записывать, например,
10.MAX_VALUE // Синтаксическая ошибка
x=10;
x.MAX_VALUE; // Равно undefined
Константы Number можно использовать только в контексте самого класса Number:
1000 < Number.MAX_VALUE // Равно true
1/0 == Number.POSITIVE_INFINITY // Равно true
Дело в том, что перечисленные выше константы являются свойствами функции-конструктора класса Number. Ведь функции — это объекты, а, значит, у них могут быть собственные свойства! Об этом подробнее мы поговорим позже.
А вот методы класса Number делегируются экземпляру, созданному при помощи оператора new или создаваемому автоматически, в виде обертки числового значения (если используется объектная нотация):
45.7777777.toPrecision(4) // Равно строке "45.78"
var x = new Number(34.5);
x.toFixed(5) // Равно строке "34.50000"
Описание методов класса Number смотрите в соответствующем разделе Number заметки.