Лучший способ — контекстный. Но вот самый простой:
function myFunction( input ){
input = 0 ? 0.0001 : input; // same as if( input == 0 ){ input = 0.0001; }
return 1 / input;
}
В основном, если ввод равен нулю, превратите его в очень маленькое число, прежде чем использовать его в качестве знаменателя. Отлично работает с целыми числами, так как после деления их можно округлить в меньшую сторону.
Несколько предостережений не позволяют этому быть универсальным:
- Это может привести к ложным срабатываниям, если ваш ввод принимает очень маленькие числа.
- Он не будет запускать какой-либо код обработки ошибок, если вам нужно сделать что-то особенное, если введен ноль.
Так что это лучше всего подходит для некритических случаев общего назначения. Например, если вам нужно вернуть результат сложного вычисления и вам все равно, будет ли ответ точным до N цифр (определяется как 0,0001 против 0,00000001 и т. д.); вы просто не хотите, чтобы он сломался при делении на ноль.
Как предложил другой ответ, вы также можете создать глобальную функцию многократного использования.
function divisor( n ){ return ( n = 0 ? 0.0001 : n ); }
function myFunction( input ){ return 1 / divisor( input ); }
Возможные улучшения:
function divisor( n, orError ){
if( typeof n == 'undefined' || isNaN( n ) || !n ){
if( orError ){ throw new Error( 'Divide by zero.' ); }
return 0.000000000000001;
}else{ return 0 + n; }
}
Это будет принимать любое значение (null, число, строка, объект) и, если оно недействительно или равно нулю, вернуть отказоустойчивое нулевое значение. Это также приводило бы вывод к числу на тот случай, если бы это была строка, и вы делали что-то странное. Все это гарантирует, что ваша функция делителя всегда будет работать. Наконец, для случаев, когда вы хотите самостоятельно обрабатывать такие ошибки, вы можете установить для второго параметра значение true и использовать try/catch
.
person
Beejor
schedule
13.09.2018