falsy값은 조건문이나 논리 연산 등에서 거짓(false)으로 평가되는 값들을 의미한다. falsy값들은 boolean 문맥에서는 false로 통일되어 사용되지만 각자가 의미하는 바는 모두 다르다.
- false
- 0, -0, +0 (숫자 0)
- "" (빈문자열)
- null
- undefined
- NaN
Boolean 함수에 값을 넣어보면 모두 false가 출력된다.
1. false
말그대로 false를 의미하는 불리언 타입의 리터럴 값(고정 값)이다. 직접적인 거짓을 나타낸다.
2. 0, -0 (숫자 0)
정수 0은 falsy값이며 음의 0도 falsy값이다.
자바스크립트를 포함한 부동 소수점 숫자 표현을 이용하는 프로그래밍 언어는 기본적으로 음의0을 구분한다.
0을 구분하는 이유는 다음과 같다.
- 수학 연산을 위한 구분 : 예를 들어 1을 0으로 나눌때 1/ +0은 Infinity를 나타내고 1 / -0은 -Infinity를 나타낸다. 이외에 0이 사용되는 극한값 계산 등의 연산들에서 구분이 필요한 경우가 있어 분리하여 사용한다.
- 부동 소수점으로 표현된 수에서는 그 구조상 +0과 -0이 서로 다르게 표현된다.
3. "" (빈문자열)
문자열의 내용물이 비어있을경우엔 falsy값으로 간주된다.
4. null
객체의 value나 변수를 초기화할때 사용할 수 있는데 아직 값이 없음을 명시적으로 표시한 것이다.
값이 변수나 객체에서 사용될때는 해당값이 메모리에 저장되어있고 그 메모리의 주소값을 변수나 객체의 키가 가리키도록 하여 사용한다.
이때 변수나 객체의 키값만 선언해두고 가리키는 주소를 아직 지정하지 않는 상태가 null값이다.
5. undefined
프로그래머가 특정 변수에 값이 없다는 null값을 명시해주지 않았을때 undefined가 자동으로 할당된다.
6. NaN (Not-a-Number)
데이터 타입은 number인데 값이 숫자가 아닐때를 나타낸다.
예를들어 아래와 같은 코드가 있을때
var data = +"문자열"; // +로 숫자 형변환
console.log(data); // NaN
형변환 연산자가 사용되어 타입은 Number이지만 내용물이 숫자가 아니어서 NaN을 출력하게 된다. 즉 숫자를 이용해야하는 수학 연산이 유효하지 않음을 뜻하는 것이다.
* null과 undefined의 차이 (+ undeclared)
null과 undefined, 추가로 undeclared는 모두 값이 없거나 사용 불가능한 상황을 나타내지만 각자 다른 의미를 가지고 있다.
아래 예시를 보면 간단하게 이해할 수 있다.
let nullData = null; // null : 값이 없음을 명시하는 역할
let undefinedData; // undefined : 값 초기화를 하지 않았을때 자동으로 할당되는 값
// undeclared : 선언되지 않은 변수를 사용하려할때 그 변수를 undeclared변수라고 함
console.log(nullData); // null 출력
console.log(undefinedData); // undefined 출력
console.log(undeclaredData); // ReferenceError 발생
함수나 객체내부 등 여러 상황에서 null, undefined, ReferenceError가 발생할 수 있지만 이해를 위해 변수선언으로만 설명함.
- null : nullData 변수는 프로그래머가 값이 없음을 명시적으로 나타내기위해 null값을 할당하였다.
- undefined : undefinedData 변수는 프로그래머가 값을 초기화하지 않았다. 이러한 경우 기본적으로 undefined가 할당된다.
- undeclared : undeclaredData 변수는 프로그래머가 선언조차 하지않은 상태이다. 이렇게 선언도 안되어있는 변수를 undeclared 변수라고 부르고 이러한 변수를 사용하려고 할때 나타나는 에러가 ReferenceError 이다.
'Web > JS' 카테고리의 다른 글
한국환경공단 대기오염 데이터 활용하기 (parseStringPromise, find, startsWith, padStart) (0) | 2024.10.13 |
---|---|
화살표 함수의 특징 (0) | 2024.09.30 |
JS 모듈을 불러오는 require와 import (0) | 2024.05.20 |
브라우저 저장소 (LocalStorage, SessionStorage, Cookie) (0) | 2024.05.17 |
Javascript의 실행 컨텍스트와 호이스팅, 클로저 (0) | 2024.04.26 |