JavaScript 선택적 연결 '?.'
The optional chaining
?.
is a safe way to access nested object properties, even if an intermediate property doesn't exist.
각 사용자가 이름과 주소의 온라인 양식을 작성해야 하지만 대부분의 사용자가 양식을 제출하기 위해 주소 입력 필드를 무시했다고 가정해 보겠습니다.
사용자 중 한 명이 제출한 양식은 아래와 같이 객체로 모델링됩니다.
const user = { name: 'Bello' }
console.log(user, user.address); // { name: 'Bello' } undefined
user.address
는 사용자가 채우지 않았기 때문에 undefined
를 반환합니다.또한 각
address
개체에 거리가 있어야 한다고 가정해 보겠습니다. 이러한 경우 오류가 발생합니다. 깊게 중첩된 개체, 속성의 경우 오류가 발생합니다.아래 예를 참조하십시오.
const user = { name: 'Bello' }
console.log(user, user.address.street);
// TypeError: Cannot read property 'street' of undefined
존재하지 않는 개체에 대해 많은 오류
undefined
를 원하지 않으면 어떻게 됩니까?아래 예를 참조하십시오.
const user = { name: 'Bello' }
console.log(user, user.address ? user.address.street : undefined);
// { name: 'Bello' } undefined
아래와 같이
name
라는 또 다른 중첩 개체가 있는 경우 어떻게 합니까?const user = { name: 'Bello' }
console.log(
user,
user.address ? user.address.street ? user.address.street.name
: null : null
);
// { name: 'Bello' } null
위의 코드 스니펫은 아래와 같습니다.
const user = { name: 'Bello' }
console.log(
user,
user.address && user.address.street && user.address.street.name
);
// { name: 'Bello' } undefined
콘솔에 긴 오류 문자열이 표시되지 않지만 해결해야 할 한 가지 문제가 있습니다. 바로 반복 중첩
obj.obj1...objN
또는 obj.obj1...objN.propN
입니다.선택적 연결은 반복적인 개체 중첩 문제를 해결합니다. 위의 선택적 연결은 ECMAScript2020에서 릴리스되었습니다.
아래 예를 참조하십시오.
const user = {name: 'Bello'};
document.write(user, user?.address?.street?.name);
// [object Object]undefined
참고: 위의 예가 작동하려면 먼저
user
와 같은 변수가 있어야 합니다.If you are getting an error, an older JavaScript engine is used by your browser. You need to upgrade the browser.
Edit on Stackblitz
아래에서 사용자 개체를 비워 보겠습니다.
const user = { };
document.write(user?.address?.street?.name);
// undefined
표현식의
?.
도 단락될 수 있습니다. 논리&&
연산자와 같습니다. 왼쪽에서 오른쪽으로 첫 번째 거짓 값을 찾아 반환합니다(그 뒤의 다른 값은 무시).The optional chaining
?.
is not an operator, but a special syntax construct
아래 예를 참조하십시오.
const user = null;
document.write( user?.address ); // undefined
document.write( user?.address.street ); // undefined
리콜
null == undefined
const user = null;
const x = 0;
document.write?.increaseBy1(x++);
// user value, null is falsy => .increaseBy1(x++) ignored
document.write(x); // 0
구조
?.
는 함수에서도 작동합니다.통사론:
functionName?.()
아래 예를 참조하십시오.
const userAdmin = {
admin() {
document.write("I am admin");
}
};
const userGuest = { };
userAdmin.admin?.(); // I am admin
userGuest.admin?.(); // no output, no error
개체 키 값을 검색하기 위한 또 다른 선택적 연결 구문도 있습니다.
통사론:
object?.[key]
아래 예를 참조하십시오.
const key = "firstName";
const user1 = {
firstName: "Osagie"
};
let user2 = null;
document.write( user1?.[key] ); // Osagie
document.write( user2?.[key] ); // undefined
또한
?.
와 함께 delete
를 사용할 수 있습니다.delete user?.name; // ReferenceError: user is not defined
We can use
?.
for safe reading and deleting, but not writing.
아래 예를 참조하십시오.
const user = null;
user?.name = "John"; // error
행복한 코딩
Reference
이 문제에 관하여(JavaScript 선택적 연결 '?.'), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bello/javascript-optional-chaining-a3l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)