모던자바스크립트 스터디 2일차이다.
오늘은 7, 8장을 공부했다.
일치 비교 연산자에 대해 블로깅하려고 한다.
궁금증1
왜 NaN === NaN은 false일까?
# NaN 이란?
NaN은 자신과 일치하지 않는 유일한 값이라고 한다.
number value that is a IEEE 754 “Not-a-Number” value
위처럼 숫자가 아니라고 한다.
하지만 type은 number이다.
이유
NaN은 NaN인 유일한 숫자이기 때문이다.
그러니까 자기 자신과 같은 number인 것이 없다.
그렇기 때문에 같은 NaN 끼리 비교해도 true가 아닌것이다.
The IEEE 754 spec for floating-point numbers (which is used by all languages for floating-point)
says that NaNs are never equal.
유일한 숫자일 수 있는 이유는 부동소수점 때문이란다.
궁금증2
왜 0 === -0 은 true일까?
자바스크립트에는 양의 0과 음의 0이 있다고 한다.
근데 왜 양과 음의 0이 같다고 판단될까?
이유
It's a quirk of IEEE-754 floating point.
There's no practical use for it, but because an IEEE-754 "double" is a "signed magnitude" format, negative zero "exists".
However, to avoid surprises, it's defined to equal positive zero. JavaScript (well, ECMAScript) defines (-0).toString() as "0", but not every language does (eg. in C#, Math.Round(-0.1).ToString() is "-0").
That can lead to weird fixes like x == 0 ? 0 : x
요약하자면,
0도 double이라는 포멧에 포함되니까 음의 0이 존재한다.
(-0)숫자로만 구성된 리터럴에 단항 빼기를 적용이 되서 0으로 인식한다는 것이다.
그래서 0끼리 비교하면 true가 되는 것이다.
참고
why NaN === NaN is false?
https://stackoverflow.com/questions/19955898/why-is-nan-nan-false
why 0 === -0 is true?
'JaveScript > JaveScript' 카테고리의 다른 글
모던자바스크립트 11, 12장 스터디 (0) | 2023.11.18 |
---|---|
모던 자바스크립트 9, 10장 스터디 (0) | 2023.11.17 |
null과 undefined의 차이 (0) | 2023.11.15 |
자바스크립트에서 세미콜론은 필수인가? (0) | 2023.11.13 |
Date객체가 반환하는 시간과 toISOString() 함수의 반환 시간이 다른 문제 (0) | 2023.11.06 |