특정 키가 객체에 존재하는지 여부를 확인하는 올바른 방법을 설명해야 합니다. 올바른 방법으로 넘어가기 전에 먼저 잘못된 방법을 살펴보고 실제로 얼마나 잘못된 방법인지 살펴보겠습니다.
방법 1:정의되지 않은 값 확인(잘못된 방법)
JavaScript의 휘발성 특성으로 인해 다음과 같이 객체에 키가 있는지 확인하고 싶을 수 있습니다. -
const obj = { name: 'Rahul' };
if(!obj['fName']){}
또는
if(obj['fName'] === undefined){}
이 둘은 잘못된 방법입니다. 왜?
이 경우에는 'fName' 키가 없지만 의도적으로 false로 설정되거나 정의되지 않은 'fName'이 있다고 가정하기 때문입니다.
우리 함수는 키가 존재하지 않는다는 것을 반환했어야 했지만 실제로는 존재했습니다. 따라서 이러한 경우 이 방법은 실패합니다.
방법 2 - in 연산자 사용(정확한 방법)
ES6에 방금 도입된 in 키워드는 iterable의 항목을 확인합니다. 따라서 키의 존재를 확인하기 위해 다음과 같이 할 수 있습니다 -
('fName' in obj);
방법 3 - hasOwnProperty() 메서드 사용(올바른 방법)
Object.prototype.hasOwnProperty() 메서드를 사용하여 개체에 키가 포함되어 있는지 여부를 확인할 수 있습니다.
구문은 -
obj.hasOwnProperty('fName');
Way 2와 Way 3의 차이점은 Way 3은 호출된 Object 인스턴스의 속성만 확인하는 반면 'in'은 Object 인스턴스 속성과 상속된 속성(있는 경우)을 확인한다는 것입니다.