728x90
728x90
https://kong-dev.tistory.com/23?category=982997
저 문제 정리하다가 갑자기 생긴 의문
배열에 NaN 이 있으면
includes로 찾을 수 있을까..?
let arr = [NaN];
console.log(arr10.includes(NaN)); // true
정답은 찾을 수 있다. 쌉가능
어떻게 찾는 걸까
console.log(NaN === NaN); // false
NaN은 자기자신과도 같기를 거부하는 유별난 ㅅㄲ데...
궁금해져서 MDN에 들어가 includes의 폴리필을 확인해봤다.
function sameValueZero(x, y) {
return (
x === y ||
(typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y))
);
}
많은 폴리필중 가장 간결한 느낌인걸로 골라서 찬찬히 뜯어 봤다.
x랑 y랑 같으면 바로 true를 리턴하고
x랑y가 다르다는 결과가 나오면
다음 문으로 넘어간다.
x도 number, y도 number
x도 NaN, y도 NaN 이면 true를 리턴한다.
isNaN돌리는건 이해를 하겠는데
number인지는 왜 확인 하는거지..?
문자열 'NaN'을 isNaN 돌리면 true가 나오나..?
console.log(isNaN('NaN')); // true
ㄴㅇㄱ 상상도 못한 결과.
근데 알고보니까 이게 NaN이라 그런게 아니라
모든 문자열에 isNaN을 돌리면 true가 된다.
console.log(isNaN('큰완두콩')) // true
console.log(isNaN('aa')) // true
console.log(isNaN('akdfljabn')) // true
아마 문자열을 isNaN을 돌리면 문자열을 number로 변환을 하나보다.
숫자로 이루어진 문자열이 아니면
NaN으로 변환이 되고
isNaN의 출력이 true로 되는 것 같다.
그래서 위 폴리필에 x와y의 타입을 number인지 아닌지 확인 하는 것 같다.
신기한 JavaScript의 세계...
이번 기회를 통해 NaN... 너에 대해 조금 더 알게 된거같아..
728x90
728x90
'Study > JavaScript' 카테고리의 다른 글
내 애착 메소드 Array.from 으로 표 만들기 (0) | 2021.12.03 |
---|---|
Number() 와 parseFloat() 그리고 킹받는 8진법 (0) | 2021.11.29 |
프로토타입의 교체. (0) | 2021.11.29 |
number사이에 string이 있어도 number다. (0) | 2021.11.24 |
타입변환 (0) | 2021.11.22 |
댓글