
JavaScript에서는 3가지 비교 연산이 존재한다.
=== 엄격한 같음 (삼중 등호, 항등)== 느슨한 같음 (이중 등호)Object.is (ECMAScript 2015에서 새로 생김)어떤 연산을 사용할지는 다음의 기준에 달려있다.
==)는 두 가지를 비교할 때 유형 변환을 수행하고 IEEE 754를 준수하기 위해 NaN, -0 및 +0을 특별하게 처리한다. (NaN != NaN, -0 == +0 이다.)===)는 이중 등호와 똑같지만 유형 변환을 수행하지 않는다. 그래서 형식이 다른 경우 false가 반환된다.Object.is는 형식 변환을 하지 않으며 NaN, -0 및 +0에 대한 특수 처리를 수행하지 않는다. (특수 숫자 값을 제외하고는 ===와 동일한 동작을 제공한다.)NaN과 -0 그리고 +0 처리 예시
NaN === NaN // false
-0 === +0 // true
Object.is(NaN, NaN) // true
Object.is(-0, +0) // flase
이제 Object.is와 삼중 등호(===)의 차이점은 충분히 이해했으니 이중 등호(==)와 삼중 등호(===)의 차이를 깊게 알아보자.
위에서 언급 했던 것처럼 이중 등호와 삼중 등호의 가장 큰 차이점은, 형식 변환의 유무이다.
A == B와 B == A의 결과가 항상 같다는 것을 의미한다.| x | y | == | === |
|---|---|---|---|
| 0 | false | true | false |
| "" | false | true | false |
| "" | 0 | true | false |
| '0' | 0 | true | false |
| '17' | 17 | true | false |
| [1, 2] | '1,2' | true | false |
| new String('foo') | 'foo' | true | false |
[1, 2] == '1,2'가 true로 나오는 것을 처음 알았다.==가 하는 형식 변환을 모두 신경쓰기도 힘들고 이 모든 것을 신경써서 프로그래밍 한 일은 없을 것이다.==를 사용해서 비교를 하면 예상이 힘들어 진다.==을 멀리하고 ===을 가까이 하는 것이 이롭다.