Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 'TypeError: 'undefined'는 객체가 아닙니다' 오류 원인과 해결 방법

"TypeError: 'undefined'는 객체가 아닙니다" 오류는 값이 정의되지 않은(undefined) 객체의 속성에 접근하거나 해당 객체의 메서드를 호출하려고 할 때 발생합니다. 특히 이 오류 메시지는 Safari 브라우저에서만 이러한 형태로 표시됩니다. Chrome이나 Firefox에서는 동일한 상황에서 "Cannot read properties of undefined"처럼 약간 다른 문구가 출력되기 때문에, Safari에서 개발 중이라면 이 문구를 익혀두는 것이 도움이 됩니다.

아래는 이 오류가 실제로 어떻게 발생하는지 보여주는 JavaScript 예제 코드입니다.

예제 코드

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .result {
        font-size: 18px;
        font-weight: 500;
        color: blueviolet;
    }
</style>
</head>
<body>
<h1>TypeError: 'undefined' is not an object 예제</h1>
<div class="result"></div>
<br />
<button class="Btn">클릭하세요</button>
<h3>위 버튼을 클릭하면 person 객체의 name 속성에 접근합니다</h3>
<script>
    var resEle = document.querySelector('.result');
    var BtnEle = document.querySelector('.Btn');
    var person;
    BtnEle.addEventListener('click', function(){
        try {
            alert(person.name);
        }
        catch(err){
            resEle.innerHTML = err;
        }
    });
</script>
</body>
</html>

코드 설명

위 예제에서 person 변수는 선언만 되고 값이 할당되지 않았으므로 undefined 상태입니다. 버튼을 클릭하면 person.name을 통해 정의되지 않은 객체의 속성에 접근하게 되고, 바로 이 시점에 TypeError가 발생합니다. try...catch 블록이 이 오류를 잡아 화면에 오류 내용을 출력해 줍니다.

실행 결과

JavaScript  TypeError:  undefined 는 객체가 아닙니다  오류 원인과 해결 방법

'클릭하세요' 버튼을 누르면 다음과 같이 오류 메시지가 표시됩니다.

JavaScript  TypeError:  undefined 는 객체가 아닙니다  오류 원인과 해결 방법

오류 방지 방법

이러한 오류를 예방하려면 객체에 접근하기 전에 값이 실제로 존재하는지 확인하는 습관을 들이는 것이 좋습니다.

  • if (typeof person !== 'undefined')처럼 타입 검사 후 접근하기
  • 옵셔널 체이닝(person?.name)을 사용해 안전하게 속성에 접근하기
  • 변수 선언 시 기본값을 할당해 두기 (예: var person = {};)