[Javascript] null과 undefined 차이
현재 운영 중인 사이트에서 아래와 같은 문법을 보게 되었습니다.
if(name != null && name != undefined){
// 구문
}
'name이라는 변수에 값이 없으면 구문을 실행해라'라는 말은 알겠는데, 굳이 null
과 undefined
둘다 조건을 걸 필요가 있을까요?
우선 null
과 undefined
는 무엇을 의할까요?
null과 undefined의 차이
let test_null = null;
let test_undefined;
console.log(typeof test_null); // object
console.log(test_null); // null
console.log(typeof test_undefined); // undefined
console.log(test_undefined); // undefined
null
은 변수가 선언되어있고 의도적으로 비어 있는 상태입니다.
반면에 undefined
는 선언 후에 값을 할당하지 않은 상태이죠.
typeof로 확인하면 null
은 object type이고, undefined
는 undefined 이라는걸 알 수 있습니다.
let test_null = null;
let test_undefined;
console.log(test_null == test_undefined); // true
console.log(test_null === test_undefined); // false
==
으로 비교를 하게 되면 null
이나 undefined
나 같다(=true)고 인식을 하는 반면에===
으로 엄격한 비교를 하게 되면 둘은 같지 않다(=false)로 인식하게 됩니다.
let test_null = null;
let test_undefined;
console.log(1 + test_null); // 1
console.log(1 + test_undefined); // NaN
숫자형으로 계산을 하게 되면 둘은 또 다른 결과를 같게 됩니다.null +1
은 계산이 되어서 1을 반환하는 반면undefined + 1
은 계산을 할 수 없다(NaN)을 표기하게 됩니다.
언제 undefined 인가?
// 1. 변수 할당 안했을때 undefined
let test1;
console.log(test1); // undefined
// 2. 인자값 할당 안했을때 undefined
function fn_test(a, b=2, c){
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
}
fn_test(1, 2, 3); // number, number, number
fn_test(1); // number, number, undefined
// 3. 함수 반환값 없을때 undefined
function fn_test2(){
}
console.log( fn_test2() );
소스에 보는 바와 같이 undefined
되는 상황은 아래와 같습니다.
- 변수 선언 시 값을 지정 안 한 경우.
- 함수의 인자값에 값을 넘기지 않은 경우
- return 없는 함수의 결괏값을 사용할 경우
결론
if(name != null && name != undefined){
// 구문
}
처음 null
과 undefined
둘다 조건문을 건 경우를 문제로 들었었죠.
위의 같은 경우에는 null
또는 undefined
둘중에 하나만 조건을 걸어도 되는 상황입니다.
하지만 특수하게 값이 초기화되지 않은 상황 등 을 판단하려면 ===
으로 엄격하게 조건을 걸면 됩니다.
'개발 > Javascript' 카테고리의 다른 글
[JavaScript] radio버튼 이벤트리스너 예제(eventLitner) (0) | 2023.02.08 |
---|---|
[Javascript] 구조 분해 할당 (Destructuring Assignment) (0) | 2022.11.21 |
댓글
이 글 공유하기
다른 글
-
[JavaScript] radio버튼 이벤트리스너 예제(eventLitner)
[JavaScript] radio버튼 이벤트리스너 예제(eventLitner)
2023.02.08 -
[Javascript] 구조 분해 할당 (Destructuring Assignment)
[Javascript] 구조 분해 할당 (Destructuring Assignment)
2022.11.21