[JavaScript 기본상식 1] ==, === 차이점

진성·2022년 5월 31일
0

==, === 차이점

자바스크립트에서 비교 연산자는 ==, ===이 있다.
앞에 = 하나를 !로 바꾸면 반대되는 의미가 되면서 다른지를 비교를 하게 된다.
그러면 ==과 ===의 차이는 무엇이냐

==는 Equal Operator이고, ===는 Strict Equal Operator이다.

==는 값만 비교를 하고 값이 같으면 true이고 다르면 false이다.
===는 값과 값의 종류까지 비교하여 모드 같을때 true를 다르면 false가 된다.

1 == "1" // true
1 === "1" // false

위에 코드와 같이 ==은 값만 비교하는 것이고, ===은 타입의 종류까지 비교를 하기에 false가 나오게 된다.

그러면 null과 undefined와 같이 공통적으로 undefined를 뜻하는 것은 어떻게 나오는 것인가.

null == undefined // true
null === undefined // false

위 코드와 같이 ===을 사용하게 되면 값의 타입을 확인하기에 false가 나오게 된다.

NaN은 Not a Number라는 뜻으로 숫자가 아닌 것을 의미한다.
이는 자바스크립트의 isNaN 메서드를 확인해보면 알 수 있다.
isNaN은 숫자가 아닌지 숫자인지 판별한다.
숫자인 경우 false를 숫자가 아닌 경우 true가 나오게 된다.

isNaN(1) // false
isNaN("a") // true

그러면 NaN끼리 비교를 하게 되면 어떻게 되는 것인가.

NaN == NaN  // false
NaN === NaN // false

숫자가 아닌 것을 의미하는 타입의 종류는 같지만 그 값 자체끼리는 다르기에 두개의 비교 연산자 모두 false가 나오게 된다.

배열과 객체를 비교 했을때는 어떻게 되는 것인가.

const a = [1, 2, 3]
const b = [1, 2, 3]
a == b // false
a === b // false

배열은 할당할때 각 변수의 각 메모리 주소를 참조를 한다.
이는 깊은 복사와 얕으 복사를 할 때 자세히 알아볼 수 있게 된다.
그래서 두개의 참조하는 메모리 주소가 다르기에 두 a, b는 같지 않다.

const a = [1, 2, 3]
b = a
a == b // true
a === b // true

위 코드를 확인해보면 당연한 결과지만 둘이 같은 메모리 주소를 참조하기에 true가 나오게 된다.

객체 또한 마찬가지로 메모리 주소를 참조하기에 위 배열을 비교하는 것과 같은 결과가 나오게 된다.

출처 : [JS Operator] ==와 ===의 차이점

profile
풀스택 진행중...

0개의 댓글