truthy falsy 값에 대해 알아보자. falsy value는 정확히 말하자면 false가 아니지만 boolean으로 변환했을시에 false가 되는 값들을 말한다. falsy value에는 0
,''
,undefined
,null
,NaN
이렇게 다섯가지가 있다. 아래의 코드를 보자.
const money = 0;
if (money) {
console.log("Don't spend it all :)");
} else {
console.log('You should get a job!');
}
여기서 money의 값은 0이다. if문에서 ()
안에 있는 값은 자바스크립트의 강제 변환(coercion)을 통해 Boolean 값으로 변환된다. 이 경우 0은 Falsy 값이므로, else 문이 출력되게 된다.
다음 코드도 살펴보자.
let height;
if(height) {
console.log('YAY! Height is defined');
} else {
console.log('Height is UNDEFINED')
}
height에 아무 값도 할당되지 않았으므로, undefined 값을 가지게 된다. 자바스크립트는 이를 Boolean 타입으로 변환하여 Falsy 값으로 인식하고, 결과적으로 else 문이 출력된다.
다음으로 equality operators에 대해 알아보자
const age = '18';
if (age === 18) console.log('You just became an adult :D (strict)');
if (age == 18) console.log('You just became an adult :D (loose)');
===
는 strict equality operator이고 ==
는 loose equality operator이다. 이 두 개의 차이는 strict equality operator는 타입 강제 변환(type coercion)을 하지 않아 무조건 타입이 같아야 같다고 보고, 반대로 loose equality operator는 타입 강제 변환을 해줘서 다른 타입이어도 같다고 본다. 예를 들어, 위의 코드처럼 문자열 '18'과 숫자 18을 같다고 보는 것이다. 항상 strict equality operator를 사용하는 것이 추천된다.
const favourite = Number (prompt("What's your favourite number"));
console.log(favourite);
console.log(typeof favourite);
prompt
함수를 사용하면 사용자가 값을 입력하는 창이 나오게 되는데, 그 값이 숫자라도 항상 string 형태이다. 그래서 Number()
로 감싸서 숫자로 만들어준다.
if (favourite === 23) { //'23' == 23
console.log('Cool! 23 is an amazing number!')
} else if (favourite=== 7) {
console.log('7 is also a cool number')
} else if (favourite === 9){
console.log('9 is also a cool number')
}
else {
console.log('Number is not 23 or 7 or 9')
}
다른 조건을 명시해 줄 때 쓰는 else if이다.
아까 둘이 같다는걸 배웠으니 둘이 안같다고 할때는 ?
if (favourite !== 23) console.log('why not 23?');
이런식으로 써준다. 느슨하게 비교할 때는 !=라고 써줄 수도 있지만, !==를 사용하는 것이 좋다.