
지금껏 C언어와 Java에 친숙한 나는 처음 JacaScript를 공부할 때 문법적으로 놀랐던 적이 많다. 그 중 하나가 ==와 ===이다. 아니 두 수를 비교할 때는 '==' 연산자를 사용하는데 '='이 3개나 붙는다고?!!👀 이 두 연산자의 차이점을 살펴보자.
Equal Operator이다. a == b라고 했을 때 a와 b의 값을 비교하여 같다면 true, 다르다면 false를 리턴한다.Strict Equal Operator이다. ==의 Equal Operator의 앞에 Strict가 붙은 걸 보면 좀 더 엄격한 operator라는 걸 예상할 수 있을 것이다. a === b라고 하면 a와 b를 비교하는데 값 뿐만 아니라 값의 종류까지 비교하여 같다면 true, 다르다면 false를 리턴한다.-> 아래의 간단한 예시를 보자.
0 == '0' //true
0 === '0' //false
같은 두 값을 가지고 비교를 하는데 ==는 true가, ===는 false가 출력된다. 왜 그럴까?
첫 번째 비교는 Equal Operator인 ==를 가지고 비교를 했으므로 두 수의 값만 가지고 비교를 하게된다. 따라서 두 수의 값은 0으로 동일한 값이므로 true라는 값이 출력된다.
두 번째 비교는 Strict Equal Operator인 ===를 가지고 비교를 했으므로 두 수의 값과 값의 종류(type)를 비교하게된다. 앞의 0은 값은 0인 타입은 number타입이고 숫자이고 뒤의 '0'도 동일하게 0의 값을 갖지만 타입은 ' '가 붙으면서 string타입으로 문자가 된다. 그렇다보니 값은 같더라도 타입이 다르므로 false가 출력된다.
-> 한 가지 예시를 더 보자.
/* [1] */
null == undefined //true
null === undefined //false
//=====================================
/* [2] */
typeof(null) //'object'
typeof(undefined) //'undefined'
일반적으로 우리가 종종 사용하는 null과 undefined는 모두 값이 할당되지 않은 상태이다. 따라서 ==와 === 연산자 모두 동일한 결과값을 가질 것 같지만 그건 큰 오산이다!!
[ 1 ] 에서 볼 수 있듯이 첫 번째 Equal Operator인 ==에서는 두 값은 같은 값이므로 true를 출력해준다. 그러나 이 두 값을 [ 2 ]에서와 같이 typeof() 메소드를 이용하여 각 타입을 출력해보면 null은 object, undefined는 undefined로 타입이 다른 것을 확인할 수 있다. 따라서 ===(Strict Equal Operator)를 사용하여 비교를 하면 두 값은 엄연히 다른 값이므로 false가 출력된다.
처음 JavaScript의 비교 연산자를 마주쳤을 때 굉장히 충격적이었다. 내 인생에서 비교 연산자로는 ==가 전부였는데 =를 3개나 사용하여 비교를 해야한다니.. 하지만 이렇듯 언어들의 다양한 특징들을 알아가는 것은 매우 신선하다.
==를 어느 순간에 사용해야할 지는 아직까지 모르겠지만, 일반적으로 우리가 생각하는 비교는 기본적으로 ===를 사용해야할 것 같다. 그렇지 않으면 첫 번째 예시처럼 number타입인 0과 string타입인 '0'이 동일하다고 여겨질 수 있으므로😱
💡 비교가 필요한 연산이 있을 시 기본적으로 ===를 사용해주자!!