
동기:
if와 while 조건문을 유연하게 작성하고자,
조건식이 false로 판단되는 값들을 정리하였습니다.
*false가 아닌 값들은 전부 true로 판별됩니다.
조건문의 괄호 안에는 부울리언(boolean)타입이 아닌
여러가지 타입의 데이터가 입력될 수 있습니다.
if (바로여기) {}
while( 여기){}
그러한 데이터들은 모두 true, 혹은 false로 평가됩니다.
- 예시
- truthy
"hello" 나 1은 각각 문자열(string)과 숫자(number) 타입을 갖습니다.
하지만 이 값들이 들어간 조건식은 true로 평가됩니다.
이러한 값들을 truthy 라고 합니다
- falsy
undefined나null은 실제로false가 아니지만,
조건식에선 false로 평가됩니다.
이러한 값들을 falsy라고 합니다.
실수가 발생하는 포인트
null이나 undefined를 제외한 대부분의 값들은 조건식 내에서 true로 평가됩니다.
존재하지 않는 값을 가져온다면, null이나 undefined로 평가되니
조건문을 "대입된 값이 잘 로드되어졌는가?"를 따지는 데에 응용할 수 있습니다.
하지만 대입되는 값들의 종류를 잘 고려하지 못하면
의도와 전혀 다르게 작동하는 함수가 만들어집니다.
다음은 성분이 배열안에 존재하는지 판단하는 함수입니다.
성분값 x 와 배열 arrInput을 입력받아
indexof를 이용해 반환되는 숫자로 true / false를 판별합니다.
const checkIndex = function (x, arrInput) {
const index = arrInput.indexOf(x)
if (index) { // index의 존재여부 판단
console.log(`입력한 값 ${x}의 index는 ${index} 입니다.`)
return index
}
else {
console.log(`입력값 ${x}은 해당 배열에 존재하지 않습니다.`)
}
}
checkIndex("b", ["b",2,7,"y"])
//입력값 b은 해당 배열에 존재하지 않습니다.
checkIndex("c", ["b",2,7,"y"])
//입력한 값 c의 index는 -1 입니다
위의 예시에서 b는 분명 해당 배열에 존재합니다.
하지만 인덱스 값이 0이라, 조건문이 false로 평가되었습니다.
또, indexOf 메서드는 배열 안에 해당 값이 존재하지 않으면undefined나 null이 아닌 -1을 반환합니다.
그래서 index 값은 -1이 되었고 조건문은 true로 평가되었습니다.
이런 예상치 못한 작동을 막기 위해서
어떤 값들이 false로 판별되는지 정리해 놓을 필요가 있다고 느꼈습니다.
falsy 값 표
| Value | TypeValue |
|---|---|
| false | Boolean 부울리안 |
| 0 | Number 숫자 |
| "" | String 문자열 |
| null | null object 오브젝트 |
| undefined | undefined 정의되지않음 |
| NaN | NaN number 숫자 |
이외의 값들은전부 true로 평가됩니다.
읽어주셔서 감사합니다.
오류나 오탈자가 있다면 댓글로 알려주세요!
** 230518 수정
falsy라는 개념이 따로 있었습니다.
노마드 10주 스터디분들 감사합니다.
참고자료
https://developer.mozilla.org/en-US/docs/Glossary/Falsy
Falsy - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
A falsy (sometimes written falsey) value is a value that is considered false when encountered in a Boolean context.
developer.mozilla.org
'it공부 (개념) > javascript' 카테고리의 다른 글
| 변수선언식의 왼쪽에도 중괄호{}가 온다! : 구조 분해할당 (0) | 2023.03.31 |
|---|---|
| 자바스크립트와 파이썬의 for문은 다르다. //for in, for of, for in keys().. (0) | 2023.03.30 |
| dependencies: 의존성이란? package.json과 함께 알아보기 /자바스크립트, Node.js (0) | 2023.03.19 |
| 자바스크립트에서 랜덤 정수 출력하기 (0) | 2023.03.06 |
| filter(필터): 배열의 성분이 불편해? / 자바스크립트 메서드 (0) | 2023.02.21 |