undefined 와 null 의 차이

Q&A 큐레이션

1. null과 undefined를 나누어 사용하는 이유가 무엇인가요?

javascript 공부중인 학생입니다. '없음'은 null과 undefined로 나누어 사용한다고 하는데, 이 둘의 차이는 알겠으나 왜 이 두개를 나눠서 다르게 사용하게 된 것인가요? 값을 지정하지 않았다는 것과 없다는 것이 코드를 짤 때 큰 차이를 가져오게 되나요? 소중한 답변 감사합니다.


답변

1. 언어를 설계한 사람이 이를 구분지어 놓았습니다. 메모리 공간을 어떻게 초기화하냐의 차이입니다. 2. 엔진에서 변수에 할당된 값에 따라 return 하기에 특정 변수의 값을 비교하거나 특정 api나 object 등의 attribute를 접근할 때 구분이 필요합니다. 요런 부분의 코드를 짠다면 동작의 차이를 가져오겠죠. 예외처리에 대한 부분을 신경쓰셔서 학습해가시면 곧 경험하실겁니다.

외 2개 답변 보러 가기

2. null === null 과 undefined ===undefined 왜 true입니까?

네트워크 또는 운영체제 적인 원리를 들어 설명 가능하신 분 찾습니다.. 영어단어 10개도 못외우는 두뇌로서는 단순암기로는 맨날 까먹어버리네요..


답변

이게 언어에 따라 좀씩 다른지라... 간단하게 자바스크립으로 말씀드리자면, === 은 strict equality comparison operator라고 합니다. 형도 같은지 비교하는 겁니다. 1 === '1' 은 false입니다. null 은 비어있는 것을 뜻합니다. undefined는 아직 값을 지정하지 않았음 을 뜻합니다. 따라서 두 개의 값은 다르다고 할 수 있습니다. 하지만 == 에서는 두개의 타입이 다름을 따지지 않기 때문에 null == undefined 가 true로 나옵니다. null == null, undefined == undefined 도 true 입니다. 하지만 ===는 타입도 따지기 때문에 null == undefined는 false가 됩니다. 정리하자면 다음과 같습니다. == 의경우 한쪽이 undefined 혹은 null 이면, 다른쪽이 undefined / null 인 경우만 true 그 외는 false === 의 경우는 양쪽이 형(타입)도 같으면 true 그외는 fasle 가 되겠습니다.

이 질문 바로 가기

3. javascript hoisting이란?

안녕하세요. javascript 질문도 몇개 올라오는 것 같아서 저도 질문 남깁니다! 공부를 하다가 javascript hoisting을 쉽게 설명하면 "함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것" (https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html) 이라고 많이 하는데, 이게 무슨 뜻인지 또 어떻게 가능한 것인지 궁금합니다.


답변

이 부분은 실행 컨텍스트를 이해했을 때 더 정확한 개념적 이해가 가능합니다. 코드를 실행했을 때, 자바스크립트 엔진은 코드를 “평가”하는 과정을 거치는데요, 이때 실행 컨텍스트가 생성이 됩니다. 실행 컨텍스트는 “레코드”라는 공간에 먼저 선언된 변수와 함수 선언문들이 있는지 확인을 하고 있다면 먼저 정보들을 가져옵니다. var 키워드로 선언된 변수들은 선언과 동시에 암묵적으로 undefined로 할당이 됩니다. 이후 코드를 “실행’하는 과정에서 순차적으로 코드를 실행하면서 값이 할당됩니다. 예를 들어 var a = 1이라는 코드가 있다면 var a는 먼저 레코드에 등록이 되어있는 상태이고 1이라는 값은 실행하는 과정에서 코드가 한 줄씩 실행될 때 할당되는거죠. 그래서 코드를 실행할 때 함수를 선언하고 값을 할당하는 코드 전에 console.log(a)를 출력했을 때 undefined를 반환하는 것입니다. 이것을 변수 호이스팅이라고 하는 것입니다. 우아한테크코스 크루분들이 진행하시는 테크토크 영상인데요 실행 컨텍스트 내용 영상을 보시면 더 확실하게 이해가 가실거에요! :) https://www.youtube.com/watch?v=EWfujNzSUmw&t=791s

외 2개 답변 보러 가기

4. Node 에서 MySQL 값이 Undefined 일경우 에러는 어떻게 처리 하나요?

Node Back End 개발 중 MySQL 값을 넣는 중 undefined일 경우 nodemon waiting Error 가 발생을 합니다 ( waiting for file changes before starting...) 초기에 이 에러로 인해 서버다운이 많이 발생했었습니다. 그래서 Undefined가 들어가지 않도록 개발을 하고 있습니다. 혹시나 Undefined가 들어갔는지 미리 확인도 하고요. 하지만! 혹시나! 하는 마음에 Error 처리에 대해 공부하는데 이 부분은 잘 나오지 않더라고요. (... 찾아보아도 Undefined가 들어가지 않도록 하세요가 끝입니다. ) MySQL 쿼리 작성중 Undefined 발생 ( waiting for file changes before starting...) 를 어떻게 처리 할 수 있을까요? 고수님들 도와 알려주세요~~


답변

DB에 저장할 때 저장하는 데이터가 Undefined가 떠서 저장할 수 없다는 오류가 난다는 것일까요? 저도 아직 배우는 입장이라서 제가 아는 선에서 말씀드리겠습니다! 우선 DB에 해당 데이터가 값이 있는 상태로 저장되어야하는 데이터라고하면 Undefined가 들어가지 않도록 하는게 맞다고 생각합니다. 예를 들어 프론트에서 전해주는 body안의 값이 Undefined가 나오는 경우 body값이 비었는지 체크하는 로직을 짜서 다른 문자열 값으로 대체하여 저장을 시키는 방법이 있습니다. 추가로 서버가 다운되는 현상은 에러로 인한 예외처리를 하지 않으셨기 때문입니다. try catch문에 대하여 공부하시고 습득하시면 더 좋으실 것 같습니다! [try catch] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

외 1개 답변 보러 가기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!