==는 Equal Operator이고, ===는 Strict Equal Operator이다.
==
a==b 라고 할 때, a와 b의 값이 같은지를 비교해서, 같으면 true, 다르면 false를 반환한다. (값만 같으면 true인 것이다.)
===
a===b 라고 할 때, 값과 값의 종류(Data Type)가 모두 같은지를 비교해서, 같으면 true, 다르면 false를 반환한다.
예시
값은 똑같이 1이지만 값의 종류가 숫자냐, 문자열이냐에 따라 === 연산자를 사용할 때 결과가 false라고 나온다.
var a = 1;
var b = "1";
console.log(a == b); // true
console.log(a === b); // false
console.log(null == undefined); // true
console.log(null === undefined); // false
console.log(true == 1); // true
console.log(true === 1); // false
console.log(0 == "0") // true
console.log(0 === "0") // false
console.log(0 == ""); // true
console.log(0 === ""); // false
console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
var a = [1,2,3];
var b = [1,2,3];
console.log(a == b); // false
console.log(a === b); // false
배열을 할당할 때, 변수는 각 메모리의 주소를 참조한다.
두 변수 a, b의 값과 데이터 타입이 같지만, 이와 상관없이 참조하는 메모리의
주소가 다르기 때문에 a, b는 같지 않다.
var a = [1,2,3];
var b = [1,2,3];
var c = b;
console.log(b === c); // true
console.log(b == c); // ture
새로운 변수 c에 변수 b를 할당해주면, 변수 c도 b가 참조하는 같은 메모리의 주소를 참조하게 되어, 두 변수 c, b는 같다. c, b의 값과 데이터 타입이 같기 때문에,
==와 ===의 결과같이 동일하다.
객체도 동일하다.
var x = {};
var y = {};
var z = y;
console.log(x == y) // false
console.log(x === y) // false
console.log(y === z) // true
console.log(y == z) // true