我正在尝试isNaN
在Node.js模块的箭头函数内使用全局函数,但出现此错误:
[eslint] Unexpected use of 'isNaN'. (no-restricted-globals)
这是我的代码:
const isNumber = value => !isNaN(parseFloat(value));
module.exports = {
isNumber,
};
关于我做错了什么的主意吗?
PS:我正在使用AirBnB样式指南。
我正在尝试isNaN
在Node.js模块的箭头函数内使用全局函数,但出现此错误:
[eslint] Unexpected use of 'isNaN'. (no-restricted-globals)
这是我的代码:
const isNumber = value => !isNaN(parseFloat(value));
module.exports = {
isNumber,
};
关于我做错了什么的主意吗?
PS:我正在使用AirBnB样式指南。
Answers:
如文档所示,请使用Number.isNaN
。
const isNumber = value => !Number.isNaN(Number(value));
引用Airbnb的文档:
为什么?全局isNaN将非数字强制转换为数字,对于任何强制NaN的结果均返回true。如果需要此行为,请使其明确。
// bad
isNaN('1.2'); // false
isNaN('1.2.3'); // true
// good
Number.isNaN('1.2.3'); // false
Number.isNaN(Number('1.2.3')); // true
Number('1.2.3')
上面示例中的原因。
typeof
检查。
Number.isNaN(+'1.2.3')
是+
如果您使用的话,这是一个额外的选择Number.isNaN
仅供参考,这不适用于IE。在此处查看浏览器兼容性。
@Andy Gaskell isNumber('1.2.3')
return 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
就我而言,我想将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浏览器上运行。
对我来说,这很好,并且ESlint没有任何问题
window.isNaN()
Number.isNaN('abc')
是false
。而isNaN('abc')
为true
window.isNan()
对付其他Airbnb的配置(该规则是eslint.org/docs/rules/no-restricted-properties)
no-restricted-properties
由于这个问题,我很遗憾不得不停用该功能
isNaN
和Number.isNaN
功能不一样。例如isNaN('1a') true Number.isNaN('1a') false