вопрос | ответ |
Math.random(x) | Возвращает псевдо-случайное число в интервале [0,1) - то есть между 0(включительно) и 1(не включая). Генератор случайных чисел инициализуется текущим |
Math.min(a, b, c...) | Возвращает наименьший из списка аргументов |
Math.max(a, b, c...) | Возвращает наибольший из списка аргументов |
Math.exp(x) | Возвращает ex, где e — основание натуральных логарифмов. |
Math.abs(x) | Возвращает абсолютное значение числа |
Math.pow(x, exp) | Возводит число в степень, возвращает xexp, например Math.pow(2,3) = 8. Работает в том числе с дробными и отрицательными степенями, например: Math.pow( |
Math.log(x) | Возвращает натуральный (по основанию e) логарифм x. |
Math.sqrt(x) | Возвращает квадратный корень из x. |
Функции общего назначения | Разные полезные функции: |
Math.tan(x) | Возвращает тангенс x (в радианах) |
Math.cos(x) | Вычисляет косинус x (в радианах) |
Math.sin(x) | Вычисляет синус x (в радианах) |
Math.atan2(y, x) | Возвращает угол до точки (y, x). Описание функции: Atan2. |
Math.atan | Возвращает арктангенс x (в радианах) |
Math.asin(x) | Возвращает арксинус x (в радианах) |
Math.acos(x) | Возвращает арккосинус x (в радианах) |
Тригонометрия | Встроенные функции для тригонометрических вычислений: |
Если нам нужно именно число, то мы можем получить его, применив '+' к результату n.toFixed(..): | var n = 12.34; alert( +n.toFixed(5) ); // 12.34 |
Итоговая строка, при необходимости, дополняется нулями до нужной точности: | var n = 12.34; alert( n.toFixed(5) ); // "12.34000", добавлены нули до 5 знаков после запятой |
num.toFixed(precision) | var n = 12.36; alert( n.toFixed(1) ); // "12.4" |
num.toFixed(precision) | Существует специальный метод num.toFixed(precision), который округляет число num до точности precision и возвращает результат в виде строки: |
Округление до заданной точности | Обычный трюк — это умножить и поделить на 10 с нужным количеством нулей. Например, округлим 3.456 до 2го знака после запятой: var n = 3.456; a |
Это удобно в первую очередь тем, что легко читается и не заставляет ставить дополнительные скобки как Math.floor(...): | var x = a * b / c ^ 0; // читается так: "a*b/c и округлить" |
Любая побитовая операция такого рода подойдет, например XOR (исключающее ИЛИ, "^") с нулем: | alert( 12.3 ^ 0 ); // 12 alert( 1.2 + 1.3 ^ 0); // 2, приоритет ^ меньше, чем + |
В результате побитовая операция, которая не изменяет число, например, двойное битовое НЕ — округляет его: | alert( ~~12.3 ); // 12 |
Округление битовыми операторами | Битовые операторы делают любое число 32-битным целым, обрезая десятичную часть. |
Округление | alert( Math.floor(3.1) ); // 3 alert( Math.ceil(3.1) ); // 4 alert( Math.round(3.1) ); // 3 |
Math.round | Округляет до ближайшего целого |
Math.ceil | Округляет вверх |
Math.floor | Округляет вниз |
Округление | Одна из самых частых операций с числом — округление. В JavaScript существуют целых 3 функции для этого. |
toString(система счисления) | Как показано выше, числа можно записывать не только в 10-чной, но и в 16-ричной системе. Но бывает и противоположная задача: получить 16-ричное предст |
function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); } | Разберёмся, как она работает. Начнём справа. |
Проверка на число для всех типов | Если вам нужна действительно точная проверка на число, которая не считает числом строку из пробелов, логические и специальные значения — используйте с |
Если вы хотите быть уверенным, что число, начинающееся с нуля, будет интерпретировано верно — используйте второй необязательный аргумент parseInt — ос | alert( parseInt('010', 10) ); // во всех браузерах 10 |
Ошибка parseInt('0..') | parseInt (но не parseFloat) понимает 16-ричную систему счисления: alert( parseInt('0xFF') ) // 255 В старом стандарте JavaScript он умел понимать и |
Конечно, существуют ситуации, когда parseInt/parseFloat возвращают NaN. Это происходит при ошибке на первом же символе: | alert( parseInt('a123') ); // NaN |
alert( parseFloat('12.3.4') ) | // 12.3, ошибка на второй точке |
alert( parseInt('12px') ) | // 12, ошибка на символе 'p' |
parseInt и ее аналог parseFloat преобразуют строку символ за символом, пока это возможно. | При возникновении ошибки возвращается число, которое получилось. parseInt читает из строки целое число, а parseFloat — дробное. |
Для удобного чтения таких значений существует функция parseInt: | alert( parseInt('12px') ); // 12 |
Оператор '+' для таких значений возвратит NaN: | alert( +"12px" ) // NaN |
Мягкое преобразование: parseInt и parseFloat | В мире HTML/CSS многие значения не являются в точности числами. Например, метрики CSS: 10pt или -12px. |
И, конечно же, проверка isNaN посчитает числами значения false, true, null, т.к. они хотя и не числа, но преобразуются к ним: | +false = 0 +true = 1 +null = 0 +undefined = NaN; |
Единственный тонкий момент — в том, что пустая строка и строка из пробельных символов преобразуются к 0: | alert(isNaN(" \n\n ")) // false, т.к. строка из пробелов преобразуется к 0 |
Функция isNaN является математической, она преобразует аргумент в число, а затем проверяет, NaN это или нет. | var x = "-11.5"; if (isNaN(x)) { alert("Строка преобразовалась в NaN. Не число"); } else { alert("Число"); } |
Аналогичным образом происходит преобразование и в других математических операторах и функциях: | alert( '12.34' / "-2" ); // -6.17 |
Единственное исключение — пробельные символы в начале и в конце строки, которые игнорируются: | alert( +" -12"); // -12 alert( +" \n34 \n"); // 34, перевод строки \n является пробельным символом alert( +"" ); // 0, пустая строка становитс |
Строгое — означает, что если строка не является в точности числом, то результат будет NaN: | alert( +"12test" ); // NaN |
Преобразование к числу | var s = "12.34"; alert( +s ); // 12.34 |
Преобразование к числу | Строгое преобразование можно осуществить унарным плюсом '+' |
isFinite(n) | Функция isFinite(n) возвращает true только тогда, когда n — обычное число, а не одно из этих значений: alert( isFinite(1) ); // true alert( isFinite( |
isFinite(n) | Итак, в JavaScript есть обычные числа и три специальных числовых значения: NaN, Infinity и -Infinity. |
Значение NaN можно проверить специальной функцией isNaN(n), которая возвращает true если аргумент — NaN и false для любого другого значения. | var n = 0/0; alert( isNaN(n) ); // true |
Следующий код ничего не выведет: | if (NaN == NaN) alert("=="); // Ни один вызов if (NaN === NaN) alert("==="); // не сработает |
Значение NaN используется для обозначения математической ошибки и обладает следующими свойствами: | Значение NaN — единственное, в своем роде, которое не равно ничему, включая себя. |
Например, деление 0/0 в математическом смысле неопределено, поэтому возвращает NaN: | alert( 0 / 0 ); // NaN |
NaN | Если математическая операция не может быть совершена, то возвращается специальное значение NaN (Not-A-Number). |
Бесконечность можно присвоить и в явном виде: var x = Infinity. | Бывает и минус бесконечность -Infinity: alert( -1 / 0 ); // -Infinity |
Infinity — особенное численное значение, которое ведет себя в точности как математическая бесконечность ?. | Infinity больше любого числа. Добавление к бесконечности не меняет её. alert(Infinity > 1234567890); // true alert(Infinity + 5 == Infinity); // tr |
Деление на ноль, Infinity | Представьте, что вы собираетесь создать новый язык… Люди будут называть его «JavaScript» (или LiveScript… неважно). Что должно происходить при попытке |
Если количество нулей отрицательно, то число сдвигается вправо за десятичную точку, так что получается десятичная дробь: | // здесь 3 сдвинуто 5 раз вправо, за десятичную точку. alert( 3e-5 ); // 0.00003 <-- 5 нулей, включая начальный ноль |
Также доступна запись в «научном формате» (ещё говорят «запись с плавающей точкой»), который выглядит как <число>e<кол-во нулей>. | Например, 1e3 — это 1 с 3 нулями, то есть 1000. // еще пример научной формы: 3 с 5 нулями alert( 3e5 ); // 300000 |
Способы записи | alert( 0xFF ); // 255 в шестнадцатиричной системе alert( 010 ); // 8 в восьмиричной системе |