javascript에서는 ==과 ===은 큰 차이를 갖는다고 한다.
==은 Equal Operator라고 하고, ===은 Strict Equal Operator라고 한다.
=== 이름에서 유추 할 수 있듯이 좀더 엄격한 잣대(?)로 이해하면 된다. 예를 들면서 이해보자
let a = 1
let b = "1"
console.log(a == b) // true
console.log(a === b) // false
위 예처럼 같은 1라는 모습은 같지만 ===은 좀더 엄격하게 데이터 타입까지 같아야 한다. a는 숫자형이고, b는 문자열이기 때문이다.
여기서 포스팅을 마치려 했지만 참조사이트에 재밌는 예들이 많아 같이 소개 하려고 한다.
null 과 undefined 는 공통적으로 값이 없음을 뜻하지만 data Type이 다르다고 한다.
console.log(null == undefined) // true
console.log(null === undefined) // false
console.log(true == 1) // true
console.log(true === 1) // false
1이 truethy한 값인 것은 알았지만 == 이런 형식으로는 사용 해본적이 없어 예로 올려봤다.
console.log(NaN == NaN) // false
console.log(NaN === NaN) // false
수업시간에 배운거 같은데 응?하면서 봐서 예로 올렸다. NaN은 특이하게 ==과 === 모두 false를 반환 하기 때문에 Number.NaN 함수를 사용하여 true를 반환 할 수 있다고 한다.
let a = [1,2,3]
let b = [1,2,3]
console.log(a == b) // false
console.log(a === b) // false
배열을 할당할 때 각변수는 메모리의 주소를 참조 한다고 한다.
a, b는 값과 테이터 타입은 같지만 이와 상관없이 참조하는 메모리 주소가 달라서 false 반환한다고 한다.
//하지만 b를 다른 변수에 할당 해주면 어떨까?
let b = [1,2,3]
let c = b
console.log(a == b) // true
console.log(a === b) // true
이 경우 변수 c도 b가 참조하는 주소를 참조하기 때문에 같은 값이라고 한다. (그렇기 때문에 b에 있는 데이터를 바꾸면 C 또한 같이 바뀌게 된다는...)
기초라고 생각했던 ==, === 을 자세히 살펴보니 많이 알게 되었다.
[[JS Operator] ==와 ===의 차이점]
https://steemit.com/kr-dev/@cheonmr/js-operator