ESLint意外使用isNaN

时间:2017-10-11 00:08:08

标签: javascript eslint

我试图在Node.js模块中的箭头函数中使用isNaN全局函数,但我收到此错误:

[eslint] Unexpected use of 'isNaN'. (no-restricted-globals)

这是我的代码:

const isNumber = value => !isNaN(parseFloat(value));

module.exports = {
  isNumber,
};

关于我做错了什么的任何想法?

PS:我使用的是AirBnB风格指南。

5 个答案:

答案 0 :(得分:162)

作为documentation suggests,请使用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

答案 1 :(得分:10)

仅供参考,这对IE不起作用。 在浏览器兼容性下检查here

答案 2 :(得分:1)

@Andy Gaskell 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

答案 3 :(得分:0)

就我而言,我想将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 :(得分:0)

对我来说,这很好,并且ESlint没问题

[root@server files]# php -f accfinal_rubley_parse.php Array ( [0] => Array ( [0] => ) )