동기:
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
'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 |