isNaN과 Number.isNaN의 차이점
거의 모든 사람들이`isNaN`이 무엇이며 어떻게 사용하는지 알고 있습니다. 그것은 “그게 숫자처럼 보이는 것입니까, 정말 숫자입니까?”라는 의미입니다. 주어진 값이 “Not a Number”이면 true를 반환합니다. 나는 당신이 요점을 가지고 있다고 가정합니다. 좋아, 이제 여기에 거래가 있습니다. isNaN과 Number.isNaN의 차이점은 무엇인가요?
설명을 시작하기 전에 글을 쓰도록 권해준 친구 Rafael에게 감사드립니다.
isNaN부터 시작하겠습니다. 이것은 어디에서나 호출 할 수있는 전역 함수입니다. 실제 작동 방식을 살펴 보겠습니다.
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
그렇게 간단하지만 잘못된 방향이 있습니다. 예는 다음과 같습니다.
isNaN 구현에 따라 알 수 있듯이 문자열 값을 숫자로 처리하고 이에 따라 결과를 반환합니다 ..`isNaN ( ‘blabla’)`확인
그러면 우리가 가진 오해를 해결하기 위해 Number.isNaN 정적 메서드는 EcmaScript 2015와 함께 제공됩니다. # Number.isNaN
무엇을하나요?
제 경우에는 두 개의 매개 변수를 숫자 유형으로 받아들이고 대상의 크기 조정에 대한 애니메이션을 수행하는 메서드가 있습니다. 목적. 약간의 리팩토링을 한 후 어떻게 든 이상한 행동이 생겼습니다. 예, 단위 테스트를 작성 했어야했는데, 부끄럽습니다. 어쨌든, 어떤 경우에 메서드는 undefined를 매개 변수로받습니다. 그래서 나는 그것들을 확인해야합니다.
나는 이것을 썼습니다 :
내 부주의는 나를 잘못된 논리로 이끌었습니다. Number.isNaN (undefined)가 false를 반환하기 때문입니다. (old isNaN (undefined) returns true) 그래서 다음과 같이 변경했습니다.
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
그래서 작동하는 것 같습니다. 하지만 가능한 모든 실패를 돌보고 싶었습니다. undefined 대신 null을받을 수도 있습니다. null을 받으면 내 논리가 실패합니다. 그 이유는 무엇입니까?
null * null; // 0
null * 8 // 0
보시는 것 같습니다. 그래서 다음과 같이 코드를 업데이트했습니다.
내 목표는 두 값이 정의되지 않거나 null인지 확인하는 것이 었습니다. 그리고 내 여정은 결국 그 기사를 쓰고 내 지식을 업데이트하는 것으로 끝납니다. 내가 아는 구현은 환상적이지는 않지만 그 여정은 교육적이었습니다.