ESLint Неожиданное использование isNaN
Я пытаюсь использовать глобальную функцию isNaN
внутри функции стрелки в модуле Node.js, но я получаю эту ошибку:
[eslint] Unexpected use of 'isNaN'. (no-restricted-globals)
Это мой код:
const isNumber = value => !isNaN(parseFloat(value));
module.exports = {
isNumber,
};
Любая идея о том, что я делаю неправильно?
PS: Я использую руководство по стилю AirBnB.
Ответы
Ответ 1
Как предлагает документация, используйте Number.isNaN
.
const isNumber = value => !Number.isNaN(parseFloat(value));
Котировка документации Airbnb:
Зачем? Глобальный isNaN принуждает номера не числа к номерам, возвращая true для чего-либо, что принуждает к NaN. Если это поведение желательно, сделайте его явным.
// bad
isNaN('1.2'); // false
isNaN('1.2.3'); // true
// good
Number.isNaN('1.2.3'); // false
Number.isNaN(Number('1.2.3')); // true
Ответ 2
FYI, это не будет работать для IE. Проверьте здесь, в браузере.
Ответ 3
В моем случае я хотел трактовать 5 (целое число), 5,4 (десятичное число), "5", "5,4" как числа, но больше ничего, например.
Если у вас есть аналогичные требования, ниже может работать лучше:
const isNum = num => /^\d+$/.test(num) || /^\d+\.\d+$/.test(num);
//Check your variable if it is a number.
let myNum = 5;
console.log(isNum(myNum))
Чтобы включить отрицательные числа:
const isNum = num => /^-?\d+$/.test(num) || /^-?\d+\.\d+$/.test(num);
Это также устранит проблему глобального использования isNaN.
Если вы преобразуете функцию isNum в обычную функцию ES5, она будет работать и в браузере IE.
Ответ 4
@Энди Гаскелл isNumber('1.2.3')
вернет true
, вы можете отредактировать свой ответ и использовать Number()
вместо parseFloat()
const isEmpty = value => typeof value === 'undefined' || value === null || value === false;
const isNumeric = value => !isEmpty(value) && !Number.isNaN(Number(value));
console.log(isNumeric('5')); // true
console.log(isNumeric('-5')); // true
console.log(isNumeric('5.5')); // true
console.log(isNumeric('5.5.5')); // false
console.log(isNumeric(null)); // false
console.log(isNumeric(undefined)); // false