ESLint isNaN의 예기치 않은 사용


154

isNaNNode.js 모듈의 화살표 함수 내 에서 전역 함수 를 사용하려고 하는데이 오류가 발생합니다.

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

이것은 내 코드입니다.

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

module.exports = {
  isNumber,
};

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

PS : AirBnB 스타일 가이드를 사용하고 있습니다.

답변:


282

는 AS 문서에서 알 수 사용 Number.isNaN.

const isNumber = value => !Number.isNaN(Number(value));

에어 비앤비 문서 인용 :

왜? 전역 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

28
그러나 isNaNNumber.isNaN동일한 기능하지 않습니다. 예를 들어 isNaN('1a') true Number.isNaN('1a') false
rosencreuz

3
@rosencreuz 원하지 않는 행동과 비슷합니다. 이것이 Number('1.2.3')위의 예에있는 이유 입니다.
Patrick Portal

2
어리석은 규칙, 요점은 숫자로 강제하는 것 typeof입니다. 그렇지 않으면 확인 만 할 수도 있습니다 .
Dominic

나는 당신이 사용한다면 Number.isNaN(+'1.2.3')여분의 +것입니다Number.isNaN
Ibraheem


3

@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

나는 지금이 대답을 보았습니다. 답변이 업데이트되었습니다. 감사합니다!
Andy Gaskell

1

필자의 경우 5 (정수), 5.4 (10 진수), '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 브라우저에서도 작동합니다.


0

나에게 이것은 잘 작동했으며 ESlint에 아무런 문제가 없었습니다.

window.isNaN()


AirBnb 표준을 사용하면 다음을 얻을 수 있습니다. ESLint : 'window.isNaN'은 사용이 제한됩니다. 대신 Number.isNaN을 사용하십시오 (제한없는 속성)
Bartek Maciejewski

@BartekMaciejewski Number.isNaN의 문제점은 그것들이 동일한 기능이 아니라는 것입니다. 예를 들어. Number.isNaN('abc')입니다 false. 그리고 isNaN('abc')이다true
Yoannes 슬러

예, 전적으로 귀하에게 동의합니다. window.isNan()다른 AirBnb의 구성에 대한 사용을 언급하고 싶습니다 (규칙은 eslint.org/docs/rules/no-restricted-properties )
Bartek Maciejewski

@BartekMaciejewski 아쉽게도이 no-restricted-properties문제로 인해 비활성화해야했습니다
Yoannes Geissler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.