falsy value, == vs === 연산자Javascript/Javascript 지식2022. 10. 31. 10:13
Table of Contents
falsy value
- Javascript에서 Boolean 문맥(if 문)에서 boolean이 아닌 다른 타입의 값을 false로 사용할 수 있는 값이다!
- 아래 표에 나온 값들 이외에는 모두 truty value이다!
- [](빈 array), {}(빈 object), "false"(문자열 false), "0"(문자열 0)등은 truty value! 헷갈리지말자
- 이 값들은 동등 비교 연산자를 사용할 때
falsy value | |
false | boolean false |
0 | 숫자 0 |
-0 | negative zero |
0n | bingint zero |
"". '', `` | empty string |
null | |
undefined | |
NaN | Not A Number |
- 아래 코드를 보면 쉽게 이해된다!
!! 모르는 사람은 없겠지?
console.log(!!false); //false
console.log(!!0); // false
console.log(!!-0); // false
console.log(!!0n); // false
console.log(!!""); // false
console.log(!!null); // false
console.log(!!undefined); // false
console.log(!!NaN); // false
// 헷갈리는 것들
console.log(!![]); // true
console.log(!!{}); // true
console.log(!!"0"); // true
console.log(!!"false"); // true
== 연산자 (equality operator)
- 타입이 아닌 값만 비교하는 연산자
- x == y를 수행할 때 아래와 같은 규칙이 존재한다! (꽤 많지만 어렵진 않음)
- x === y는 타입이 다르면 false를 리턴하지만 x == y는 적당한 형 변환을 통해 boolean 값을 리턴한다
x와 y의 타입이 같을 때
- x, y가 undefined이면 true
- x, y가 null이면 true
- x, y가 number일 때
- x혹은 y가 NaN이면 false
- x, y가 같을 때 true
- x가 +0이고 y가 -0일 때 true
- x, y가 다르면 false
- x, y가 string일 때
- x, y가 모두 같은 문자로 이루어져있고 길이도 같으면 true
- 그렇지 않으면 false
- x, y가 object일 때
- 참조하고 있는 객체가 다르면 false 반환
- boolean일 때
- x가 true, y가 false라면 false 반환
x와 y의 타입이 다를 때
- x가 null이고 y가 undefined이면 true
- x가 string이고 y가 number이면 x를 number로 바꾸고 y와 비교했을 때 같으면 true
- "" == 0을 수행하면 ""이 Number("")으로 0으로 변경되고 0 == 0을 수행해서 true를 반환한다.
- x가 boolean이면 x를 number로 바꾸고 y랑 비교
- Number(true) = 1, Number(false) = 0
- true == '1'을 수행한다고 하면 true가 1로 바뀌고 y의 '1'을 1로 바꿔서 1==1이 수행되어 true가 반환!
- false == "false"를 수행하면 Number(false)가 0이 되고 Number("false")가 0이되고 0==0이 수행되어서 true가 반환된다!
- x가 object이고 y가 string이나 number라면 x를 toString이나 valueOf를 사용해서 primitive type으로 변경하고 y와 비교
- [1, 2, 3] == "1,2,3"을 수행한다고 하면 [1, 2, 3].toString()이 "1,2,3"으로 변경되고 "1,2,3" == "1,2,3"을 수행해서 true를 반환한다.
- {} == false를 수행하면 {}.toString()가 "[object Object]"이 되고 Number(false)가 0이되어 "[object Object]" == 0이되고 다시 Number("[object Object]")를 수행해서 NaN == 0이 되어 false가 반환된다!
=== 연산자 (strict equality operator)
- ==와 다르게 값 뿐만 아니라 타입까지 같아야 하는 경우!
- 타입이 다르면 무조건 false를 반환한다!
- x === y에서 x나 y가 NaN이면 false를 반환!
- +0 === -0은 true를 반환
'Javascript > Javascript 지식' 카테고리의 다른 글
lodash curry, flow (0) | 2024.01.03 |
---|---|
이벤트 버블링/캡쳐/위임 (1) | 2022.09.16 |
클로져 (0) | 2022.09.14 |
자바스크립트 작동 방식 (0) | 2022.06.13 |
자바스크립트와 동시성 (0) | 2022.06.06 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!