== 와 === 의 차이
- 둘의 차이를 요약하자면,
묵시적으로 타입을 변환해서 비교하냐 (==) / 타입을 변환하지 않고 비교하냐 (===) 로 축약할 수 있다.
== 을 사용하지 않고 === 만 사용하는 컨벤션 하나만 채용하더라도 수많은 버그의 가능성을 막을 수 있다.
- 동작을 예측하기 힘든 연산자나 키워드를 회피하는 전략이다.
== (non strict equality operator)
non strict equality operator, 엄격하지 않은 동등성 연산자라고 불린다.
- 타입 변환 동등성 비교 (type-converting equality comparison) 라고 말할 수 있다.
- 값 비교를 위해 타입 변환을 진행한 뒤에 값을 비교한다. 이 때문에,
=== 과 다르게 아래의 결과가 true 가 된다.
1 == "1" -> true
0 == false -> true
undefined == null -> true
0 == false // true
0 === false // false
1 == "1" // true
1 === "1" // false
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
[]==[] or []===[] //false, refer different objects in memory
{}=={} or {}==={} //false, refer different objects in memory
Non-strict equality operator MDN 공식 문서
=== (strict equality operator)
strict equality operator, 엄격한 동등성 연산자라고 불린다.
- 형변환을 진행하지 않는다. 타입이 다르면 다르다고 판단한다.
- 타입 변환을 진행하기 때문에,
== 과 다르게 아래의 결과가 false 이다.
1 === "1" -> false
0 === false -> false
undefined === null -> false
0 == false // true
0 === false // false
1 == "1" // true
1 === "1" // false
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
[]==[] or []===[] //false, refer different objects in memory
{}=={} or {}==={} //false, refer different objects in memory
Strict equality MDN 공식 문서