for (let i = start; i < end+1; i++) {
for (let i = start; i < end+1; i++) {
if (unknownVariable) {
/* Мы попадем сюда, если:
unknownVariable объявлена
unknownVariable не равна null
unknownVariable не является пустой строкой ('')
*/
}
Для того чтобы преобразовать градусы в радианы, нужно умножить значение в градусах на (Math.PI/180):
const radians = degrees * (Math.PI / 180);
Таким образом, для угла 90° получаем следующее вычисление:
const radians = 90 * (Math.PI / 180);
console.log(radians); // 1.5707963267948966
Для того чтобы преобразовать радианы в градусы, нужно умножить значение в радианах на (180/Math.PI):
const degrees = radians * (180 / Math.PI);
Есть десятичное число, нужно вычислить его шестнадцатеричный эквивалент.
Решение
Использовать метод Number.toString() с аргументом, определяющим основание системы счисления, в которую выполняется преобразование:
const num = 255;
// выведет ff — шестнадцатеричный эквивалент 255
console.log(num.toString(16));
Метод isFinite() практически не отличается от isNaN(), за исключением того что обрабатывает странные граничные случаи, такие как 1/0, в которых возвращает значение infinity. Если применить метод isNaN() для infinity, то он вернет false, что выглядит несколько неоднозначно.
Если приходится выполнять много финансовых вычислений, то можно упростить себе жизнь, воспользовавшись сторонней библиотекой, такой как bignumber.js (https://github.com/MikeMcl/bignumber.js). В ней есть специализированный числовой тип данных, который во многом подобен обычному Number, но обеспечивает дополнительную точность для чисел с определенным количеством знаков после точки.
Ошибки округления чисел с плавающей точкой — хорошо известное явление, которое существует практически в любом языке программирования. Для того чтобы понаблюдать его в JavaScript, выполните следующий код:
const sum = 0.1 + 0.2;
console.log(sum); // выведет 0.30000000000000004
Мы не можем избежать ошибки округления, но можем свести ее к минимуму. При работе с денежными суммами в определенной валюте (например, в долларах) можно умножать все значения на 100, чтобы не иметь дела с дробными величинами. Вместо того чтобы писать такой код:
const currentBalance = 5382.23;
const transactionAmount = 14.02;
const updatedBalance = currentBalance — transactionAmount;
// Теперь updatedBalance = 5368.209999999999
лучше использовать следующие переменные для денежных сумм:
const currentBalanceInCents = 538223;
const transactionAmountInCents = 1402;
const updatedBalanceInCents = currentBalanceInCents - transactionAmountInCents;
// Теперь updatedBalanceInCents = 536821
Этот прием решит проблему для тех операций, которые работают с целыми числами без потери точности, такими как сложение и вычитание количества центов. Но что будет, если понадобится вычислить налог или доход в процентах? Результатом этих операций в любом случае будут дробные значения. Придется делать то же самое, что делают в таких случаях предприятия и банки, — округлять значения сразу после транзакции:
const costInCents = 4899;
// Вычислить налог в 11 % и округлить результат
// до ближайшего целого числа центов
const costWithTax = Math.round(costInCents*1.11);
Сколь бы хороши ни были случайные числа, но если код JavaScript выполняется в браузере, он будет подвергаться многочисленным атакам. В конце концов, ничто не помешает злоумышленникам увидеть ваш код и написать вместо него другой, который полностью обойдет генерацию случайных чисел. Но если код работает на сервере — это совсем другое дело, к нему это предупреждение не относится.
Преимущество такого компромисса заключается в том, что метод getRandomValues() имеет примерно такую же производительность, как и Math.random(). (Он быстрый.)