SPACE RUMI

Hi, I am rumi. Let's Splattack!

[STUDY] 스터디/Deep Dive JS

js 타입변환 / '0'은 false지만 truthy하다 / '0'은 왜 true로 평가되는가

백루미 2022. 11. 22. 01:01
반응형

string으로 암묵적 변환

0 + '' // '0'
[10, 20] + '' // '10, 20'

 

 

number로 암묵적 변환

'1' * 10 // 10

 

정말 이상한것은 '0'은 false인데 truthy한 값으로 평가된다니 이게 무슨말인가..?

'0' == false // true. ('0'은 false다)
!'0' // false (..?)
!!'0' // true (..???)

 

아래 참조 표를 보면, "0"은 비어있는 문자열이 아니기때문에 truthy한 값으로 평가된다.  이런게 js의 괴랄한 점...
빈 문자열에 아무튼 0이 있다..

js equality 확인 사이트
https://dorey.github.io/JavaScript-Equality-Table/

 

js의 falsy 값은 기억하도록 하자.
if(false), if(null), if(undefined), if(0), if(NaN), if('')

 

Boolean 타입으로 변환

부정논리연산자를 두번 사용한다 (!!)

!!10 // true
!!0 // false

'' == false // true
'0' == false // true

!!'' // false
!!'0' // true...진짜 킹받네

 

옵셔널 체이닝 (?.)

falsy 값이더라도 null, undefiend가 아니면 우항의 프로퍼티 참조를 이어간다. 

let data = null;
console.log(data.length); //Cannot read properties of null (reading 'length')
console.log(data?.length); //undefiend

 

null 병합 연산자

falsy값이지만 유효하다면, 값을 평가하는 ??를 사용한다.

let defaultHeight = 0 ?? 100;
let defaultWidth = 0 || 100;

console.log(defaultHeight) // 0
console.log(defaultWidth) // 100
반응형