Javascript

Javascript - in vs hasOwnProperty

kwangsunny 2021. 7. 12. 23:18

in 연산자는 객체에 지정된 속성이 있는지를 확인한다.

"prop" in obj  -->  객체 obj "prop" 이라는 속성이있다면 true, 없다면 false 리턴한다.

객체 기본 속성인 hasOwnProperty 해당 객체의 속성유무를 판단해 true / false 리턴하는데,

그럼 둘의 차이는 뭘까..?

아래 예제를 보자.

function Person(){};
Person.prototype.eyes = 2;

var kim = new Person();

kim.hasOwnProperty("eyes");  //  false
"eyes" in kim;  //  true

코드에서 객체 kim eyes 직접 가지고있지 않기때문에 hasOwnProperty false 리턴하지만 in true 리턴한다.

, hasOwnProperty는 객체가 직접 가지고있는 속성만 체크하지만, in 은 프로토타입 링크로 연결된 상위 프로토타입 까지 쭈욱 탐색한다.

그래서 "toString" in kim 를 한다면 역시 true 리턴한다.