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 заметки.