[JS] == 과 ===의 차이

ds-k.fe·2021년 6월 21일
0

JavaScript

목록 보기
10/14
post-thumbnail

동등 연산자(Equality) ==

동등연산자(==!=)는 두 피연산자를 비교하기 위해, Abstract Equality Comparison Algorithm이라는 것을 사용한다고 한다.(이름부터 Abstract) 다행히 MDN에서는 간략하게 그 내용을 요약해 놓았는데 보자면

  • 두 피연산자가 모두 객체일때, 동일한 객체를 참조할 경우 true 반환
  • 하나가 null 이고 다른 하나가 undefined일 때 true 반환
  • 하나의 피연산자가 Boolean일 경우, true면 1로 변환 false일 경우 +0으로 변환
  • 하나는 객체고 다른 하나가 숫자나 문자열이면, 객체를 기본 데이터타입으로 변환하여 비교

밑에서 말할 일치 연산자(===)와의 가장 큰 차이점은 동등 연산자는 타입변환을 시도한다는 점이다.
다르게 말하면...

일치 연산자는 타입변환을 시도하지 않는다.
-> 다른 타입은 다르다고 판단한다.

묘한(!) 타입 변환의 예시
"1" ==  1;            // true
1 == "1";             // true
0 == false;           // true
0 == null;            // false
0 == undefined;       // false
0 == !!null;          // true
0 == !!undefined;     // true
null == undefined;    // true

const number1 = new Number(3);
const number2 = new Number(3);
number1 == 3;         // true, 동일 객체 참조
number1 == number2;   // false, 다른 객체 참조

일치 연산자(Strict equality) ===

일치 연산자(==!==)는 Strict Equality Comparison Algorithm이라는 친구(이름부터 !엄격!)를 사용하여 비교한다.

  • 피연산자가 다른 타입이면 false
  • 하나가 null이고 하나가 undefined면 false
  • booleanboolean, stringstring끼리... -> 같은 타입끼리만 비교

결론

== 는 암묵적으로 타입 변환을 해서 비교하기 때문에 위 밈처럼 혼란스러운 상황이 생길 수 있으므로,
비교를 할 때는 항상 ===을 쓰도록 하자!

reference

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality

0개의 댓글