JavaScript

객체 프로퍼티 존재 확인하기

AgileJung 2022. 6. 12. 16:24
728x90
반응형

코딩 테스트를 하면서 자바스크립트의 메서드를 더욱더 단단하게 공부해야겠다는 생각이 들었다.

객체에 대해서 말해보자.

 

객체 

객체는 key와 value을 한 쌍으로 이루어진 형태이다.

 

 


특정 프로퍼티(Key) 확인하기

객체 안의 특정 프로퍼티의 존재를 확인하고 싶다면

(1) in 연산자를 사용해보자.

const obj = {
  name: "suin",
  age: "18"
};

console.log("name" in obj); //true

in 연산자를 사용하면 해당 프로퍼티가 객체 안에 있는지 없는지를 boolean 값으로 출력해준다.


(2) Reflect.has(객체, "프로퍼티") 는 ES6에서 도입된 문법으로 in 연산자와 같은 역할을 한다.

const obj = {
  name: "suin"
};

console.log(Reflect.has(obj, "name"));  //true;

(3) 객체.hasOwnProperty("프로퍼티") 메서드도 in 연산자, Reflect.has()와 같은 역할을 한다.

하지만, 상속받은 프로퍼피는 false를 반환한다.

const obj = {
  name: 'suin'
};

console.log(obj.hasOwnProperty('name')); //true;
console.log(obj.hasOwnProperty('age')); //false;

여기서 상속받은 프로퍼티란?

객체가 속한 프로토타입 체인 상에서 존재하는 프로토타입 메서드를 말한다. (내장 함수의 개념이라고 생각하면 편할 것 같다.)

 

객체의 프로퍼티의 존재 유무를 확인하는 3가지의 방법의 차이점은 상속받은 프로퍼티를 어떤 값을 반환하는 가?라고 보면 될 것 같다.

 

아래는 객체의 프로퍼티를 확인하는 3가지 방법으로 객체 프로토타입의 메서드인 toString을 검색했을 때의 결과다.

// Reflect.has(객체)
console.log(Reflect.has(obj, "toString"));  //true;

// in 연산자
console.log("toString" in obj); //true

// 객체.hasOwnProperty()
console.log(obj.hasOwnProperty('toString')); //false;

hasOwnProperty() 메서드를 사용했을 때만 상속받은 프로퍼티를 false 값으로 반환하는 것을 확인할 수 있다.

728x90
반응형