> 웹 프론트엔드 > JS 튜토리얼 > '정의되지 않은 속성을 읽을 수 없음' 오류를 방지하기 위해 JavaScript의 중첩 속성에 안전하게 액세스하려면 어떻게 해야 합니까?

'정의되지 않은 속성을 읽을 수 없음' 오류를 방지하기 위해 JavaScript의 중첩 속성에 안전하게 액세스하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-06 22:22:13
원래의
727명이 탐색했습니다.

How Can I Safely Access Nested Properties in JavaScript to Avoid

정의되지 않은 속성 오류 해결

JavaScript에서 중첩된 데이터 구조를 처리할 때 "정의되지 않은 속성을 읽을 수 없습니다" 오류가 발생하면 실망스러울 수 있습니다. 정의되지 않은 값이나 null 값의 속성에 액세스하려고 시도할 때 발생합니다. 다음 배열을 고려해보세요.

const test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];
로그인 후 복사

이 배열을 반복하고 다음과 같이 c 속성을 기록하려고 시도하면

for (i=0; i<test.length; i++) {
    console.log(a.b.c);
}
로그인 후 복사

a.b가 다음인 두 번째 항목에서 오류가 발생합니다. 한정되지 않은. 이 오류를 방지하기 위해 일반적인 접근 방식은 속성 체인의 각 수준을 확인하는 것입니다.

if (a && a.b) {
    console.log(a.b.c);
}
로그인 후 복사

그러나 깊게 중첩된 데이터 구조를 처리할 때 이는 지루할 수 있습니다. 다행히 대체 솔루션이 있습니다.

선택적 체이닝(ES2020 및 TypeScript 3.7)

ECMAScript 2020 이상 또는 TypeScript 버전 3.7에 따라 JavaScript를 사용하는 경우 이상에서는 선택적 연결을 활용할 수 있습니다. 이 연산자 ?.는 오류 발생 없이 안전하게 중첩된 속성에 액세스합니다.

console.log(obj?.a?.lot?.of?.properties);
로그인 후 복사

도우미 함수 해결 방법(이전 JavaScript 버전)

이전 버전의 JavaScript의 경우 ES6 화살표 기능이 포함된 try/catch 도우미 기능이 솔루션을 제공할 수 있습니다.

function getSafe(fn, defaultVal) {
  try {
    return fn();
  } catch (e) {
    return defaultVal;
  }
}

console.log(getSafe(() => obj.a.lot.of.properties));
로그인 후 복사

다음을 수행할 수 있습니다. 또한 선택적 기본값을 제공하십시오:

console.log(getSafe(() => obj.a.lot.of.properties, 'nothing'));
로그인 후 복사

위 내용은 '정의되지 않은 속성을 읽을 수 없음' 오류를 방지하기 위해 JavaScript의 중첩 속성에 안전하게 액세스하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿