JavaScript - == vs ===

 

== 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의 메모리 주소이다. 그로인해 ca의 메모리주소가 담겨서 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