== vs ===
간단하게 말해 ==
는 값을 비교하는 것이고 ===
은 값,타입을 비교하는 것이다.
==
은 강제 형변환을 수행한다. 안전하고 확실한 비교를 위해서는 ===
을 사용해야한다.
예시
123 == '123' // true
123 === '123' // false
false == 0 // true
false === 0 // false
true == 1 // true
true === 1 // false
undefined == null // true
undefined === null // false
'abc' == new String('abc') // true
'abc' === new String('abc') // false
===
은 타입까지 비교하는 것을 볼 수 있다.
object equality by reference
const a = {name:'a'};
const b = {name:'b'};
const c = a;
console.log(a==b); // false
console.log(a===b); // false
console.log(a==c); // true
console.log(a===c); // true
객체, 배열, 함수 ...
등과 같은 Object형식의 타입인 경우는 ==,===
가 성립되지 않는다.
그러나 c
경우에는 변수에 할당된것이 origin의 메모리 주소이다. 그로인해 c
는 a
의 메모리주소가 담겨서 true
가 출력된다.
Falsy 값
false == 0
의 값이 true인 이유는 0이 Falsy값이기 때문이다.
6가지 Falsy값
- false
- 0
- ””
- null
- undefined
- NaN
falsy 값은 false 형태로 강제 형변환이 됐기 때문에 true가 출력되지만 ===
사용 시 false이다.
참고자료 : https://hyunseob.github.io/2015/07/30/diffrence-between-equality-and-identity-in-javascript/
참고자료 : https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-5-vs-3%EB%B6%84%EB%A7%8C%EC%97%90-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EB%B2%88%EC%97%AD