JS에서 '없음'을 나타내는 값은 undefined랑 null이 있음
undefined
- 사용자가 지정할 수도 있지만, JS 엔진에서 자동으로 부여하는 경우가 있음
- 값을 대입하지 않은 변수 , 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
let a; 만 하게 되면 컴퓨터에서는 메모리 영역 빈 공간에 a만 할당해놓고 값은 아직 없는 상태 - 이때 a에 접근하게 되면 undefined
- 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때
let obj = {a:1} 에서 콘솔로 obj.b를 찍으면 undefined가 나오고 , b만 찍으면 referenceError가 나옴
- return값이 없거나 호출되지 않는 함수의 실행 결과 - console.log(a) 하면 a랑 undefined나오는게 이것때문임
*비어있는거랑 undefined랑은 다름
- let arr = new Array(3) // arr // [empty*3]
- 이거랑 [undefined *3]은 다른거임 - forEach같은거 돌렸을 때 비어있으면 아예 순회 대상에서 제외되지만 undefined는 나옴 - 왜? 데이터를 지정하긴 했으니깐
- 좀 헷갈리는 내용 - 사용자가 명시적으로 부여하는거랑 자바스크립트 엔진에서 반환해주는 undefined는 다름
- 내가 let a = undefined 하면 메모리 상에 a = 1 한거랑 똑같이 저장이 되지만 , 내가 존재하지 않는 값에 접근했을 때 그 값이 아예 없다 라는 의미로 undefined를 반환해주기도 함
- var 키워드 쓰면 var a; 만 해도 자바스크립트에서 undefined로 초기화해주는 것도 있음
- undefined가 리턴됐는데 이게 내가 지정한 undefined가 리턴된건지 그냥 없다는 의미로 리턴된건지 헷갈릴 수 있음
- 이럴땐 ? 그냥 undefined를 할당 안해주면 됨 - 그러면 undefined가 리턴됐다는 의미는 아예 그 값이 없구나(배열에서는 그 인덱스가 없고,object에서는 그 프로퍼티가 없구나 라는 의미)
- 같은 의미를 가진 null이 있는데 굳이 헷갈리게 undefined로 초기화 해줄 필요가 없다는 소리
- 그런데 null은 한가지 버그가 있음 - typeOf null // object임
- 또 null === undefined // true임
- 그래서 비교할때는 == 두개만 쓰기
'JS' 카테고리의 다른 글
Js reduce (0) | 2023.02.27 |
---|---|
this 정리 (0) | 2023.02.25 |
데이터 타입 정리 (0) | 2023.02.13 |
nullish coalescing (0) | 2023.02.01 |
호이스팅 (0) | 2023.01.30 |