[javascript] null 체크와 널리시 값 체크

null 체크를 알기에 앞서 몇가지 기본적인 타입 체크를 하는 방식과 널리시(Nullish) 값에 대해서 알아야 합니다.

typeof

자바스크립트에서 변수의 타입을 체크하는 지시자는 typeof 입니다. "typeof 변수명"을 하면 변수의 타입을 반환합니다. 기본적인 사용 방법은 다음과 같습니다. 반환하는 타입 정보는 문자열입니다. typeof 반환 값과 비교를 할 때는 문자열과 비교를 해야 합니다.

let var1 = 0;
if(typeof var1 == number){}

null과 undefined

자바스크립트에서 null은 명시적으로 사용자, 또는 코드에 의해 변수에 대입한 값이 없음을 표시하는 값입니다.

중요한 것은 null은 자바스크립트에서 프리미티브 타입으로 기본 데이터 타입이지만, typeof로 null의 타입을 체크하면 "object"를 반환합니다. null 값은 내부적으로 구현된 것은 객체(object)입니다. typeof 지시자로 null 값, 또는 null 값을 가진 변수의 타입을 typeof로 얻어서 null과 비교를 하면 false가 됩니다.

console.log(typeof null == null) //false

null 체크

주의해야 합니다. null은 그냥 null과 비교해야 합니다.

console.log(var1 == null) //false

프리미티브 데이터 타입은 null , undefined, 문자(string) , 숫자(number) , bigint , 불리언(boolean) , 심볼(symbol) 7가지가 있습니다.

undefined는 변수가 선언만 되고 값을 대입하지 않은 상태를 말합니다. 표현에 따라서는 내부적으로 undefined로 초기화를 한 것으로 표현을 하기도 하며, 메모리 영역만 할당한 상태를 말합니다. undefined의 타입은 undefined입니다. 프리미티브 타입으로 자바스크립트의 기본 데이터 타입의 하나로 구분합니다.

let var2
console.log(typeof var2==='undefined') // true

null과 undefined는 변수에 값이 할당되지 않은 것을 표현하는 점에서는 같아서 false값으로 처리가 되기 때문에 값을 비교하는 비교 연산자()를 사용해서 비교하면 true가 됩니다. 값을 비교하는 비교 연산자()로 비교하기 전에 양쪽의 다른 데이터 타입을 캐스팅해서 서로 맞추게 되고, 이 과정에서 변수 값은 false가 됩니다.

let a = null; //널 값으로 초기화
let b; //변수명만 선언 undefined
console.log(a == b) //true

타입까지 비교하는 비교하는 연산자(===)로 비교하면 타입이 다르기 때문에 false가 됩니다.

널리시(Nullish) 체크 병합 연산자 '??'

null, 또는 undefined일 때 널리시라고 합니다. 널리시병합 연산자인 ??를 사용해서 왼쪽 항의 값이 널 종류인 값이면 오른쪽 값을 대입하고, 아니면 왼쪽의 값을 그대로 유지합니다.

변수의 값이 널 종류인지를 체크해서 널리시 값이 되지 않도록 해주는 연산자입니다.

함수에서 반환받는 값이 숫자 타입이어야 하지만 내부 오류로 널리시 값이 반환된 경우 이후 코드에서 반환 값을 숫자로 간주하고 연산을 하면 코드 오류가 발생합니다. 이런 오류를 방지하기 위해 ??연산자를 사용합니다.

let var3 = null
var3 = var3 ?? 0
console.log(var3) // var3 값은 0

여러 개의 변수를 체인 형태로 비교해서