--- title: Числа и даты slug: Web/JavaScript/Guide/Numbers_and_dates translation_of: Web/JavaScript/Guide/Numbers_and_dates ---
Данный раздел представляет собой введение в работу с числами и датами в JavaScript.
В JavaScript все числа являются числами двойной точности в соответствии с 64-битным двоичным форматом IEEE 754 (т.е. числами, принадлежащими диапазону между -(253 -1) и 253 -1). Целые числа не рассматриваются как отдельный тип чисел. В дополнение к числам с плавающей запятой, к числовому типу данных относятся также три символьные величины: +
{{jsxref("бесконечность")}}, -
{{jsxref("бесконечность")}}, и {{jsxref("NaN")}} (не-число). В разделе типы и структуры данных в JavaScript числовой тип данных описан в контексте с другими примитивными типами в JavaScript.
Вы можете использовать четыре типа числовых литералов: десятичный, двоичный, восьмеричный и шестнадцатеричный.
1234567890 42 // Будьте внимательны при использование нулей в начале чисел: 0888 // 888 обрабатывается как десятичное 0777 // обрабатывается как восьмеричное в нестрогой форме (511 в десятичной)
Обратите внимание, что десятичные литералы могут начинаться с нуля (0
) за которым следует другая десятичная цифра, но если следующая за нулем цифра меньше 8, то число обрабатывается как восьмеричное.
Синтаксис двоичных чисел использует ведущий 0 за которым следует латинская буква "B" в верхнем или нижнем регистре (0b
or 0B
). Если цифры после 0b
не являются 0 или 1, то будет сгенерированно SyntaxError
с сообщением: "Missing binary digits after 0b".
var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648 var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040 var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
Синтаксис восьмеричных чисел использует ноль в начале. Если цифры после 0 не входят в диапазон от 0 до 7, число будет интерпретировано как десятичное.
var n = 0755; // 493 var m = 0644; // 420
Синтаксис шестнадцатеричных чисел использует ведущий 0 за которым следует латинская буква "X" в верхнем или нижнем регистре (0x
or 0X
). Если цифры после 0x не входят в диапазон (0123456789ABCDEF), то будет сгенерированно SyntaxError
с сообщением: "Identifier starts immediately after numeric literal".
0xFFFFFFFFFFFFFFFFF // 295147905179352830000 0x123456789ABCDEF // 81985529216486900 0XA // 10
У этого встроенного объекта {{jsxref("Number")}} есть свойства для целочисленных констант, таких как максимальное число, не-число и бесконечность. Вы не можете изменить значения этих свойств, и Вы должны использовать их следующим образом:
var biggestNum = Number.MAX_VALUE; var smallestNum = Number.MIN_VALUE; var infiniteNum = Number.POSITIVE_INFINITY; var negInfiniteNum = Number.NEGATIVE_INFINITY; var notANum = Number.NaN;
Как видно из примера выше, для получения перечисленных значений, нужно обращаться к свойствам предопределенного глобального объекта Number
. Тогда как у экземпляра этого объекта, созданного вами при работе программы, этих свойств не будет.
В следующей таблице приведен список свойств объекта Number
.
Свойство | Описание |
---|---|
{{jsxref("Number.MAX_VALUE")}} | Наибольшее число из возможных для представления |
{{jsxref("Number.MIN_VALUE")}} | Наименьшее число из возможных для представления |
{{jsxref("Number.NaN")}} | Специальное "Не числовое" ("not a number") значение |
{{jsxref("Number.NEGATIVE_INFINITY")}} | Специальное значение "Минус бесконечность"; возвращается при переполнении |
{{jsxref("Number.POSITIVE_INFINITY")}} | Специальное значение "Плюс бесконечность"; возвращается при переполнении |
{{jsxref("Number.EPSILON")}} | Разница между единицей и наименьшим значением, большим единицы, которое может быть представлено типом {{jsxref("Number")}}. |
{{jsxref("Number.MIN_SAFE_INTEGER")}} | Минимальное целое, безопасное число в JavaScript. |
{{jsxref("Number.MAX_SAFE_INTEGER")}} | Максимальное целое, безопасное число в JavaScript. |
Метод | Описание |
---|---|
{{jsxref("Number.parseFloat()")}} | Принимает строку как аргумент, и возвращает числовое значение с плавающей точкой, которое удалось распознать. Тоже самое что и глобальная функция {{jsxref("parseFloat", "parseFloat()")}}. |
{{jsxref("Number.parseInt()")}} | Принимает строку как аргумент, и возвращает целочисленное значение в заданной системе исчисления, которое удалось распознать. Тоже самое что и глобальная функция {{jsxref("parseInt", "parseInt()")}}. |
{{jsxref("Number.isFinite()")}} | Определяет, является ли число, переданное в качестве аргумента, конечным. |
{{jsxref("Number.isInteger()")}} | Определяет, является ли число, переданное в качестве аргумента, целым. |
{{jsxref("Number.isNaN()")}} | Определяет, является ли число, переданное в качестве аргумента, {{jsxref("Global_Objects/NaN", "NaN")}} (не числом). Аналогичный, но более надежный метод чем глобальная функция {{jsxref("Global_Objects/isNaN", "isNaN()")}}. |
{{jsxref("Number.isSafeInteger()")}} | Определяет, является ли .число, переданное в качестве аргумента, целым и безопасным. |
Прототип Number
предоставляет ряд методов, для получения значения числа в различных форматах. В следующей таблице перечислены методы, доступные через Number.prototype
.
Метод | Описание |
---|---|
{{jsxref("Number.toExponential", "toExponential()")}} | Возвращает строку, представляющую число в экспоненциальном представлении. |
{{jsxref("Number.toFixed", "toFixed()")}} | Возвращает строку, представляющую число с заданным количеством разрядов после запятой. |
{{jsxref("Number.toPrecision", "toPrecision()")}} | Возвращает строку, представляющую число с указанной точностью. |
Объект Math
Встроенный глобальный объект {{jsxref("Math")}} содержит свойства и методы для математических констант и функций. Например, свойство объекта Math
PI
содержит значение математической константы "Пи" (3.141...), которые вы можете использовать в программе как
Math.PI
Подобным образом, математические функции являются методами объекта Math
. Они включают тригонометрические, логорифмические, экспоненциальные и другие функции. Например, если вы хотите использовать тригонометрическую функцию синуса, вы напишете следующий код
Math.sin(1.56)
Заметьте, что все тригонометрические методы объекта Math
принимают аргументы в радианах.
В следующей таблице перечислены методы объекта Math
.
Метод | Описание |
---|---|
{{jsxref("Math.abs", "abs()")}} | Возвращает абсолютное значение (модуль) аргумента |
{{jsxref("Math.sin", "sin()")}}, {{jsxref("Math.cos", "cos()")}}, {{jsxref("Math.tan", "tan()")}} | Стандартные тригонометрические функции; принимают аргументы в радианах |
{{jsxref("Math.asin", "asin()")}}, {{jsxref("Math.acos", "acos()")}}, {{jsxref("Math.atan", "atan()")}}, {{jsxref("Math.atan2", "atan2()")}} | Обратные тригонометрические функции; возвращают значения в радианах |
{{jsxref("Math.sinh", "sinh()")}}, {{jsxref("Math.cosh", "cosh()")}}, {{jsxref("Math.tanh", "tanh()")}} | Гиперболические тригонометрические функции; принимают аргументы в гиперболических углах |
{{jsxref("Math.asinh", "asinh()")}}, {{jsxref("Math.acosh", "acosh()")}}, {{jsxref("Math.atanh", "atanh()")}} | Обратные гиперболические тригонометрические функции; возвращают значения в гиперболических углах |
{{jsxref("Math.pow", "pow()")}}, {{jsxref("Math.exp", "exp()")}}, {{jsxref("Math.expm1", "expm1()")}}, {{jsxref("Math.log10", "log10()")}}, {{jsxref("Math.log1p", "log1p()")}}, {{jsxref("Math.log2", "log2()")}} |
Экспоненциальные и логорифмические функции |
{{jsxref("Math.floor", "floor()")}}, {{jsxref("Math.ceil", "ceil()")}} | Возвращают наибольшее/наименьшее целое, которое меньше/больше или равно входному значению |
{{jsxref("Math.min", "min()")}}, {{jsxref("Math.max", "max()")}} | Возвращают наибольшее или наименьшее (соответственно) из входных числовых значений, перечисленных через запятую |
{{jsxref("Math.random", "random()")}} | Возвращает случайное число от 0 до 1 |
{{jsxref("Math.round", "round()")}}, {{jsxref("Math.fround", "fround()")}}, {{jsxref("Math.trunc", "trunc()")}}, | Функции округления и отсечения дробной части |
{{jsxref("Math.sqrt", "sqrt()")}}, {{jsxref("Math.cbrt", "cbrt()")}}, {{jsxref("Math.hypot", "hypot()")}} | Корень квадратный, корень кубический, корень квадратный из суммы квадратов аргументов |
{{jsxref("Math.sign", "sign()")}} | Знак числа, показывает является ли входное число позитивным, негативным или равным нулю |
{{jsxref("Math.clz32", "clz32()")}}, {{jsxref("Math.imul", "imul()")}} |
Количество первых нулевых бит в 32-битном двоичном представлении. Возвращает результат Си-подобного 32-битного целочисленного умножения двух аргументов. |
В отличии от большинства других объектов, вам не нужно создавать свои экземпляры объекта Math
. Всегда следует использовать глобальный объект Math
непосредственно.
Объект Date
JavaScript не имеет отдельного типа данных для хранения дат. Однако, вы можете использовать объект {{jsxref("Date")}} и его методы для работы с датами и временном в вашем приложении. Объект Date
имеет большое количество методов для записи, чтения и оперирования датой и временем, а свойств не имеет ни одного.
JavaScript оперирует датами во многом аналогично языку Java. Для работы с датой эти два языка имеют множество одинаковых методов, и оба они хранят даты как количество миллисекунд, прошедших с 00:00:00 1 Января 1970 года.
Период значений, которые может принимать Data, простирается от -100 000 000 до100 000 000 дней, относительно 1 Января 1970 года.
Чтобы создать свой экземпляр объекта Date используйте такой код
:
var dateObjectName = new Date([parameters]);
где dateObjectName
это имя переменной, которой будет присвоено созданное значение с типом Date
; вместо этой переменной, присвоить созданное значение можно как свойство, любому существующему объекту.
Вызов Date
как функции, без ключевого слова new,
возвращает текущую дату и время в виде текстовой строки.
Содержимым блока parameters
в коде представленном выше, могут выступать любая из следующих конструкций:
today = new Date();
.var Xmas95 = new Date("December 25, 1995 13:30:00")
. Если не указать секунды, минуты или часы, то их значение будет принято за 0.var Xmas95 = new Date(1995, 11, 25)
.var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);
.new Date().toLocaleString('ru', { day: 'numeric', month: 'long', year: 'numeric' }); // текущая дата в формате: '10 января 2019 г.'
Подробнее про метод toLocalString
Date
Методы объекта Date
для работы с датой и временем делятся на следующие категории:
Date
.Date
.Date
в текстовом виде.При помощи методов групп "get" и"set", вы можете получить и установить значения секунд, минут, часов, дня месяца, дня недели, месяца и года по отдельности. Отдельно выделим метод getDay
, который возвращает день недели, однако соответствующего ему метода setDay
не существует, потому-что день недели высчитывается автоматически. Все эти методы используют в своей работе целочисленные значения по следующим правилам:
Например, предположим, что вы определили дату следующим образом:
var Xmas95 = new Date("December 25, 1995");
Тогда Xmas95.getMonth()
вернет 11, а Xmas95.getFullYear()
вернет 1995.
Методы getTime
и setTime могут быть
полезны при сравнении дат. Метод getTime
возвращает количество миллисекунд, прошедших с 00:00:00 1 Января, 1970 года.
Для примера рассмотрим следующий код, показывающий количество дней оставшихся до конца текущего года:
var today = new Date(); // Получаем текущую дату var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Устанавливаем месяц и день на конец года endYear.setFullYear(today.getFullYear()); // Устанавливаем текущий год var msPerDay = 24 * 60 * 60 * 1000; // Количество миллисекунд в одних сутках var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay; var daysLeft = Math.round(daysLeft); // возвращает количество дней, оставшихся до конца года
Этот пример создает объект Date
названный today, который содержит текущую дату и время
. Затем, создается вспомогательный Date
объект, названный endYear,
которому устанавливаются значения, указывающие на конец года. После этого, при помощи рассчитанного количества миллисекунд в сутках, вычисляется количество дней между today
и endYear
, При этом используются метод getTime
и округление, для получения количества полных дней.
Метод parse
полезен для присвоения значений существующим объектам Date
из текстового формата. Например, следующий код использует методы parse
и setTime
чтобы установить значение переменной IPOdate
:
var IPOdate = new Date(); IPOdate.setTime(Date.parse("Aug 9, 1995"));
В следующем примере приведена функция JSClock(), которая возвращает время в формате электронных часов:
function JSClock() { var time = new Date(); var hour = time.getHours(); var minute = time.getMinutes(); var second = time.getSeconds(); var temp = "" + ((hour > 12) ? hour - 12 : hour); if (hour == 0) temp = "12"; temp += ((minute < 10) ? ":0" : ":") + minute; temp += ((second < 10) ? ":0" : ":") + second; temp += (hour >= 12) ? " P.M." : " A.M."; return temp; }
Первым делом, функция JSClock создает новый объект Date
, названный time
; так как объект создается баз параметров, переменная time
содержит текущую дату и время. Затем вызываются методы getHours
, getMinutes
и getSeconds
, чтобы установить значения переменным hour
, minute
и second
.
Следующие четыре выражения строят текстовую строку на основе time. Первое из них создает переменную temp
, присваивая ей значение при помощи условия; Если hour
больше чем 12, то (hour - 12
), иначе просто hour.
В случае же, когда hour
равно 0, берется фиксированное значение "12".
Следующее выражение приращивает минуты к переменной temp
. Если количество минут меньше 10, то условное выражение добавляет строку с двоеточием и заполняющим нулем, иначе, просто строку с двоеточием. Секунды приращиваются к переменной temp
тем же путем.
В завершение всего, последнее условное выражение добавляет строку "P.M." к переменной temp
если hour
равно или больше 12, иначе, добавляется строка "A.M.".
{{PreviousNext("Web/JavaScript/Guide/Expressions_and_Operators", "Web/JavaScript/Guide/Text_formatting")}}