나는 특이한 문제를 좋아하는 편이다. 오늘은 최근에 본 특이한 문제를 소개 한번 해보도록 하겠다. x !== x const x = ? if ( x !== x ) { console . log ( 'Hello, world!' ) } x를 정의해서 'Hello, world!'를 출력 할 수 있을까? !==는 불일치 연산자이다. 값과 타입을 다른지 판별을 한다. 그런데 x가 x가 아니게 만들라니 참 특이한 문제이다. == 왜 쓰지 말라는 걸까? 물론 위의 문제를 해당 포스트에서 제기하였다. ===(일치연산자)는 만능이 아니다. x = NaN 이게 된다면, x !== x의 값이 참이되게 된다. x === x + 1 const x = ? if ( x === x + 1 ) { console . log ( 'Hello, world!' ) } 이 문제는 무엇일까? === 일치연산자인데 x와 x + 1이 현실에서 똑같을리 없다. 뭐 물론 x < x + 1 이 값이 참이 되는 경우는 C언어를 공부하다보면 알게 되었을 것이다. 뭐 그렇다 오버플로우이다. 자바스크립트에서 허용 되는 가장 큰값 Number.MAX_SAFE_INTEGER(9007199254740991)에 1을 더하면 어떻게 될까? 자바스크립트에서는 그냥 더해질 뿐이다. (9007199254740992) 그렇다면 Number.MAX_SAFE_INTEGER(900719925474099 1 )에 2 를 더하면 어떻게 될까? 결과는 900719925474099 2 우리가 계산으로 컴퓨터를 이겼다. 당연히 우리는 900719925474099 3 인 것을 알고있다. 뭐 내용을 따져보면 IEEE-754(부동소수점 어쩌고저쩌고) Number.MAX_SAFE_INTEGER의 이상의 값에서는 반올림을 하기 때문이라고 한다. 즉, x ...