js // reference error (참조오류)
# MDN정의
- ReferenceError 객체는 현재 범위에서 존재하지 않거나 초기화되지 않은 변수를 참조했을 때 발생하는 에러를 나타냅니다.
# 일반적인 참조오류
console.log(babo);
코드에서 babo를 선언하지 않았는데 참조하려고할때 뜬다.
+ 초기화안된 변수 참조할때
console.log(babo);
let babo;
초기화 호이스팅 포스팅 참조
https://jacobowl.tistory.com/136
변수 호이스팅, 그리고 초기화 initialize, Temporal Dead Zone
초기화는 변수선언시에 최초로 undefined가 할당이 되는것을 말한다. 먼저 그림으로 살펴보면, let value = 'hello world'; 라는 코드가 실행되면 먼저 식별자 value가 가르키는 메모리주소1이 생성되고 이
jacobowl.tistory.com
# 흔히 실수먹는 경우(객체 프로퍼티 참조)
const obj = { key1: 1, key2: 2, key3: 3 };
console.log(obj.key1); //1
이런 객체 프로퍼티에 참조하려고 할때
key1프로퍼티 키에 접근하려고하면 당연히 1을 잘 가져온다.
그렇다면 없는 키값에 접근할때는 어떻게 될까? 참조에러가 뜰까?
const obj = { key1: 1, key2: 2, key3: 3 };
console.log(obj.key4); //undefined
없는 키값 key4에 접근하려 하면 undefined가 뜬다.
참조에러가 뜨는게 아니라 에러없이 undefined가 뜬다는거다.
즉 객체안에서 없는 프로퍼티에 접근하려하면 undefined로 뜬다.
참조코드와 동시에 객체내부에서 선언이되는건지 아닌건지 모르겠지만 이렇게 되는게
실제 코드를 써보면 더 편리하다.
+이중 객체에서의 참조
const obj = { key1: 1, key2: 2, key3: 3 };
console.log(obj.key4.secondKey);
위 obj에서 key4값은 undefined일것이다.
근데 이 key4가 객체라고 생각해서 그 안의 secondKey프로퍼티에 접근하려고하면
참조에러가 아닌 타입에러가 뜬다. 이땐 옵셔널체이닝써라.
const obj = { key1: 1, key2: 2, key3: 3 };
console.log(obj.key4?.secondKey);
이게 옵셔널 체이닝..
실제 서버에서 json형식으로 데이터를 주고받는데 필요없는 프로퍼티를 서버백단에서
다 추가해서 보내야하는 불필요함이 없어진다.
얕은 객체참조에선 그냥 undefined가 떠야 수월하고 깊은 객체참조에선 옵셔널체이닝을 사용하여 참조하는게
좋다는 말임..
참조에러 설명하다가 별걸 다쓴다.
# 스트릭모드에서 변수선언문없이 변수할당했을때
"use strict";
value = "바보";
# 화살표함수에서 없는 arguments, caller프로퍼티 참조하려고할때
const fucArguments_arrow = () => {
console.log(arguments);
};
fucArguments_arrow(); // 브라우저에선 참조에러 arguments가 정의안되었음. 노드에선 전역 arguments 참조
노드에선 모듈시스템이라 스코프체인을 따라 전역 arguments객체를 참조해서 에러안뜸
caller프로퍼티도 마찬가지