객체 옵셔널체이닝 ?.

lee jae hwan·2022년 7월 22일

javascript

목록 보기
11/107
let user = {
	name:'lee',
    age:34
}

객체프로퍼티에 접근할때 .연산자 , []연산자를 사용하여 접근할 수 있다.

console.log( user.name );
console.log( user['age'] );

자바스크립트는 user.surname 존재하지 않는 프로퍼티에 접근했을때 에러를 발생시키지 않고 undefined를 반환한다.

console.log( user.surname ); // undefined
console.log( user.surname.length ); // error

user.surname;
속성접근자는 user객체에서 surname프로퍼티를 찾는다. 없다면 상위객체들에서 surname프로퍼터를 찾는다. 없으면 undefined를 반환한다.

user.surname.length;
속성접근자는 user객체에 접근하여 surname프로퍼티를 찾는데 없으므로 undefined가 반환된다.

속성접근자는 해당 변수의 메모리에 접근하는데 undefined가 참조하는 메모리는 없기때문에 에러가 발생되고 스크립트가 중단된다.

스크립트가 중지되지 않게하려면 아래와같이 예외처리를 해야한다.

let user ={
  name:'lee',
}

try {
  console.log(user.name1.length);  
} catch (error) {
  console.log(error.message);
}

자바스크립트는 객체의 구조상 위와같이 예상치못한 undefined인 프로퍼티에 접근하는 경우가 자주 발생할 수 있다.

그래서 자바스크립트는 객체옵셔널체이닝(?.)을 지원한다.
객체옵셔널체이닝은 연산자가 아니고 syntax construct다.

let user ={
  name:'lee',
}
console.log( user.name1?.length );  
console.log( user.name1?['length'] );  

name1이 undefined이면 undefined를 반환하고 length속성에 접근하지 않는다.

객체옵셔널체이닝은 구식브라우저에서 지원하지 않기때문에 아래 폴리필을 사용해야 한다.

let user ={
  name:'lee',
}
console.log(user.name1 && user.name1.length );  
let user ={
  name:'lee',
  sayHi(){
    return 'abd';
  }
}
console.log( user.sayBye?.() ); 

객체옵셔널체이닝으로 함수호출

0개의 댓글