선택적 링크란 무엇이며, 왜 사용해야 합니까?
MDN에서 선택적 링크의 정의는 다음과 같습니다.
선택적 링크 연산자(?)연결 대상 체인의 깊은 곳에 있는 속성의 값을 읽을 수 있도록 해 줍니다. 체인의 모든 인용이 유효한지 검사할 필요가 없습니다."
그래서 이것은 단지 선택할 수 있는 체인 조작부호를 사용하는 것을 의미할 뿐이다. 보기에 '?'우리는 실제로 대상의 속성 값을 보고 그것이
null
인지 undefined
인지 확인할 수 있다.만약 이 값이
null
또는 undefined
가 아니라면, 이 값을 되돌려주거나 체인에서 더 이동할 것입니다. 그렇지 않으면, 오류를 던지는 것이 아니라 더 많은 계산을 멈추고 undefined
되돌려줍니다.내 설명이 그것을 더욱 혼란스럽게 한다면 예를 들어 보자.
let person ={
name:"Rahul",
surname: "Dhiman",
address : {
state: "Maharashtra",
city: "Mumbai",
pinCode: 100000
},
getCity : function(){ return `${this.address.city}`},
likes:["JavaScript","React","React Native"]
}
선택할 수 있는 링크가 이 person
대상과 어떻게 작동하는지 알아보겠습니다.여기서, 만약 우리가 방문하고 싶다면, 우리는
person.address.city
(점) 조작부호를 사용할 것이다.console.log(person.address.city)
//expected output: Mumbai
그러나 .
대상에 address
속성이 없다면 무슨 일이 일어날까.콘솔에서 코드를 실행하고 출력을 검사합시다

이것은 마치 내가 컨트롤러를 사용하지 않은 상태에서 코드를 디버깅하고 싶다는 것과 같다.일지.
그냥 웃고 싶었어요.너 웃었어?
엔진 뚜껑 아래에서 아마 이렇게 일할 것이다.

따라서 JS 엔진 계산
person
을 할 때 아무것도 찾지 못하고 person.address
로 계산됩니다. 이것은 사실상 정의되지 않은 것이기 때문입니다. undefined
대상에서 정의되지 않은 것이기 때문입니다.그리고 JS 엔진 검사
person
의 city
속성은 미친 듯이 변합니다. 정의되지 않은 데이터 형식은 그 안에 속성을 저장하지 않기 때문에 점 연산자를 사용하여 속성에 접근하는 것은 의외입니다. 컴파일러가 오류를 던집니다.현재 우리는 어떻게 선택할 수 있는 링크 조작부호를 사용하여 그것을 복구합니까?
답안은 문제의 범위 안에 있다.
선택할 수 있는 링크를 사용하여 같은 코드를 실행해서 우리가 무엇을 얻었는지 봅시다.

여기에서, 이것은
undefined
null 또는undefined인지 확인합니다. 이것은 정의되지 않았기 때문에, 더 이상의 계산을 멈추고undefined로 돌아갑니다.그래서 우리는 실제로address
부분조차 집행하지 않았다.옵션 링크 조작자는 person.address.city
또는 null
이전 키만 검사합니다탁자를 다시 한 번 검사합시다.

여기서 우리는 그 사람을 볼 수 있다.주소?시티 부분은 영원히 실행되지 않기 때문에 오류를 던지고 정의되지 않은 결과를 되돌려주지 않습니다.
우리가 특정한 수조나 대상을 운행할 때 선택할 수 있는 체인식 조작부호도 매우 유용하다.
const testObj = {name:"Rahul",surname:"Dhiman"};
testObj.forEach(elememt => console.log(elememt));
//throws error: "obj.forEach is not a function" 😩
testObj.forEach?.(element => console.log(element));
// No errors 😎
위의 예시에서 선택할 수 있는 링크 조작부호가 undefined
의 계산 결과를 검사하고 있습니다. 이것은 정의되지 않았기 때문에 회로를 터치하고 더 이상의 실행을 멈추며 오류를 얻지 않습니다.이것이 바로 우리가 수조나 대상 방법을 사용할 때 선택할 수 있는 링크 조작부호를 어떻게 사용하는가이다.
중요한 점은 다음과 같습니다.
forEach
또는 null
유형만 검사한다undefined
.person.address?.city
이 곳에서 선택할 수 있는 링크 조작부호가address 속성을 검사하고 있습니다. 호출 체인에서 선택할 수 있는 링크 조작부호와person 대상이 검사되기 전에 나타나기 때문입니다.falsy
– obj?.prop
가 있는 경우 obj.prop
로 돌아가고 그렇지 않으면 obj
로 돌아갑니다.undefined
– obj?.[prop]
가 있는 경우 obj[prop]
로 돌아가고 그렇지 않으면 obj
로 돌아갑니다.undefined
– obj.method?.()
가 존재하면 호출obj.method()
, 그렇지 않으면 반환obj.method
Reference
이 문제에 관하여(선택적 링크란 무엇이며, 왜 사용해야 합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rdrahuldhiman/what-is-optional-chaining-and-why-you-should-use-it-1g05텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)