JavaScript의 ==, === 연산자에 대해서 알아봅니다.
==
연산자는 loose equality operator 라고 부릅니다.true
를, 다르다면 false
를 반환합니다.undefined
또는 null
이라면 다른 쪽도 undefined
또는 null
이어야만 true
undefined == null // true
// 사용 예: variable이 undefined이거나 null인 경우를 체크할 때 사용
const variable = undefined
if (variable == null) {
console.log("값이 존재하지 않음!")
} else {
console.log(`변수 값: ${variable}`);
}
Boolean
이고 다른 한쪽이 아니라면, false
는 0, true
는 1로 변환 후 다시 느슨하게 비교한다.0 == null
// false
// 한 쪽이 null 이면 다른쪽이 null | undefined 일때만 true
false == null
// false
// 한 쪽이 Boolean 인데 다른쪽이 아니므로 false 가 0으로 변환되고 다시 느슨하게 비교
// 0 == null 의 결과와 동일해진다.
false == undefined
// false
// 바로 위 예제와 같은 원리
NaN
이라면 무조건 false
가 반환된다. 양쪽이 모두 NaN
일지라도!NaN == NaN //false
NaN == undefined // false
NaN == null // false
string
과 number
를 비교할 땐 string
이 number
로 변환된 후 비교된다.12 == '12' // true
'' == 0 // true
'' == 0
의 결과에 대한 해석:
- Number('') 의 결과는 0입니다.
console.log(Number('')) // 0
- 이는 JavaScript에 존재하는 형 변환 규칙이며 그냥 외우는 수밖에 없습니다.
console.log(+'') // 0
- 숫자와 문자열을 연산할 때 숫자형이 표현 범위가 더 넓은 문자열 자료형으로 변환되는 것이 일반적이지만 JavaScript에서 숫자와 문자열을 느슨하게 비교할 때만큼은 예외입니다.
primitive
이고 한 쪽이 Object
라면 Object
를 primitive
로 변환 후, 느슨하게 값을 비교한다.Object
를 primitive
로 변환한다는 것은 toString()을 적용한다는 것이다.)const c = [true, 0.5, "hey"];
const d = c.toString(); // "true,0.5,hey"
c == d; // true
[] == 0 // true
[] == '0' // false : '' == '0' 와 같음
Object
끼리 비교하면 동일한 객체의 참조일 때 true
, 그 외에는 모두 false
const obj1 = { 'a': 1 }
const obj2 = { 'a': 1 }
const obj3 = obj2
obj1 == obj2 //false : 내용은 같으나, 서로 다른 객체를 참조
obj2 == obj3 //true : 같은 객체를 참조
const a = undefined
if (a)
console.log("true")
else
console.log("false")
// "false" 출력
null
, undefined
, NaN
, 0
, ''
, ...[]
, {'a': 1}
, 123
, 'hello'
, ...이 개념을 loose equality와 혼동하시면 안됩니다. falsy value라고 해서 false와 느슨하게 비교했을 때 같다고 나오지 않습니다. 명백히 다른 개념입니다.
false == undefined //false
false == null //false
false == 0 //true
false == NaN //false : NaN 을 비교하면 무조건 false
false == '' //true
false == ''
의 결과 해석
- 2번 규칙에 의해 false 가 0으로 변환된 후 느슨하게 비교하므로
0 == ''
와 동일해집니다.0 == ''
는0 == Number('')
와 동일하므로 true 가 반환됩니다.
===
연산자는 strict equality operator 라고 부릅니다.true
, 다르다면 false
를 반환합니다.false
"3" === 3; // false
true === 1; // false
null === undefined; // false
const obj1 = { 'a': 1 }
const obj2 = { 'a': 1 }
const obj3 = obj2
obj1 === obj2 //false
obj2 === obj3 //true