# Basics

## Десятичные числа

В JavaScript целые десятичные числа записываются как последовательность цифр. Например:

```javascript
0
3
10000000
```

Числовой формат JavaScript позволяет точно представлять все целые числа в диапазоне от –9007199254740992 (–253) до 9007199254740992 (253) включительно. Для целых значений вне этого диапазона может теряться точность в младших разрядах.

Обратите внимание, что десятичные литералы могут начинаться с нуля (`0`), за которым следует другая десятичная цифра, но если следующая за нулем цифра меньше 8, то число обрабатывается как восьмеричное.

```javascript
// Будьте внимательны при использование нулей в начале чисел:

0888 // 888 обрабатывается как десятичное
0777 // обрабатывается как восьмеричное в нестрогой форме (511 в десятичной)
```

## Двоичные числа

Синтаксис двоичных чисел использует ведущий 0, за которым следует латинская буква "B" в верхнем или нижнем регистре (`0b`or`0B`). Если цифры после `0b`не являются 0 или 1, то будет сгенерировано [`SyntaxError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError) с сообщением: "Missing binary digits after 0b".

```javascript
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
```

## Восьмеричные числа

Синтаксис восьмеричных чисел использует ноль в начале. Если цифры после 0 не входят в диапазон от 0 до 7, число будет интерпретировано как десятичное.

```javascript
var n = 0755; // 493
var m = 0644; // 420
```

## Шестнадцатеричные числа

Синтаксис шестнадцатеричных чисел использует ведущий 0, за которым следует латинская буква "X" в верхнем или нижнем регистре (`0x`or`0X`). Если цифры после 0x не входят в диапазон (0123456789ABCDEF), то будет сгенерировано [`SyntaxError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError) с сообщением: "Identifier starts immediately after numeric literal".

```javascript
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF   // 81985529216486900
0XA                 // 10
```

## Операции с числами

Для работы с числами в JavaScript-программах используются поддерживаемые языком арифметические операторы, к которым относятся операторы сложения (+), вычитания (-), умножения (\*) и деления (/). Помимо перечисленных основных арифметических операторов, с помощью большого количества математических функций, относящихся к базовой части языка, JavaScript поддерживает выполнение более сложных математических операций . Для удобства эти функции хранятся в виде свойств одного объекта Math, и для доступа к ним всегда используется литеральное имя Math.

## Преобразование чисел в строки

Преобразование чисел в строки производится автоматически, по мере необходимости. Например, если число используется в операции конкатенации строк, оно будет преобразовано в строку:

```
var n = 100;
var s = n + " жильцов в доме.";
```

Такая способность JavaScript к автоматическому преобразованию числа в строку реализует идиому программирования, которую часто можно встретить на практике: чтобы преобразовать число в строку, достаточно просто сложить его с пустой строкой:

```javascript
var n_as_string = n + "";
```

Для явного преобразования числа в строку используется функция `String()`:

```javascript
var string_value = String(number);
```

Еще один способ преобразования числа в строку заключается в вызове метода `toString()`:

```
string_value = number.toString( );
```

Метод toString() объекта Number (примитивы чисел автоматически преобразуются в объекты типа Number, благодаря чему можно воспользоваться этим методом) может принимать один необязательный аргумент, который определяет базу или основание, системы счисления для преобразования. Если основание системы счисления не указывается, то по умолчанию она предполагается равной 10. Однако существует возможность выполнять преобразования и в других системах исчисления (от 2 до 36)1, например:

```javascript
var n = 17;
binary_string = n.toString(2); // Вернет "10001"
octal_string = "0" + n.toString(8); // Вернет "021"
hex_string = "0x" + n.toString(16); // Вернет "0x11"
```

## Специальные числовые значения

В JavaScript определено несколько специальных числовых значений. Когда вещественное число превышает самое большое представимое конечное значение, результату присваивается специальное значение бесконечности, которое в JavaScript обозначается как `Infinity`. А когда отрицательное число становится меньше наименьшего представимого отрицательного числа, результатом является отрицательная бесконечность, обозначаемая как `Infinity`.

Еще одно специальное числовое значение возвращается JavaScript, когда математическая операция (например, деление нуля на ноль) приводит к неопределенному результату или ошибке. В этом случае результатом является специальное значение «не число», обозначаемое как NaN. «Не число» (Not a Number) ведет себя необычно: оно не равно ни одному другому числу, в том числе и самому себе! По данной причине для проверки на это значение имеется специальная функция isNaN(). Похожая функция, isFinite(), позволяет проверить число на неравенство NaN или положительную/отрицательную бесконечность.

| Константа                 | Значение                                                |
| ------------------------- | ------------------------------------------------------- |
| Infinity                  | Специальное значение, обозначающее бесконечность        |
| NaN                       | Специальное значение – «не число»                       |
| Number.MAX\_VALUE         | Максимально представимое значение                       |
| Number.MIN\_VALUE         | Наименьшее представимое значение                        |
| Number.NaN                | Специальное значение – «не число»                       |
| Number.POSITIVE\_INFINITY | Специальное значение, обозначающее плюс бесконеч  ность |
| Number.NEGATIVE\_INFINITY | Специальное значение, обозначающее минус бесконеч ность |
