(Javascript) 객체 속성 존재여부 확인하기

Javascript

    Object에 속성 값이 존재하는 지 여부를 체크하기 위한 방법들과 차이점(?) 정리

    아래와 같이 obj 라는 이름의 객체가 있을 때에...

    const obj = Object.create({
      name: 'Jake',
    });
    obj.gender = 'male';

    해당 객체에 특정 속성이 존재하는 지에 대한 여부를 확인하기 위해서는.....

    1. 객체의 값을 출력하여 값이 존재하는 지 여부를 가지고 확인
    console.log(obj.name, !!obj.name); // Jake true
    console.log(obj.gender, !!obj.gender); // male true
    console.log(!!obj.toString); // true
    1. in 연산자를 이용하여 확인
    console.log('name' in obj); // true
    console.log('gender' in obj); // true
    console.log('toString' in obj); // true
    1. Object.prototype.hasOwnProperty 위의 두 가지 방법은 객체 자신의 속성 값인지 여부에 대한 체크는 하지 않는다. 상속 받은 부모나 자신에게 해당 속성 값 존재 여부에 달려있다. 만약, 객체 자신의 포함하고 있는 지에 대하여 확인하려면 Object.prototype.hasOwnProperty 메소드를 사용하여 확인하여야 한다.
    console.log(obj.hasOwnProperty('name')); // false
    console.log(obj.hasOwnProperty('gender')); // true
    console.log(obj.hasOwnProperty('toString')); // false

    Reference

    Object.create

    Object.create를 이용하여 객체를 생성하면, 해당 프로토타입의 속성을 생성하는 객체에서 재사용할 수 있다. (상속의 개념으로 생각하면 되는 듯)

    obj = Object.create({ name: 'Jake' });
    /*
    Object
    	__proto__:
    		name: "Jake"
     		__proto__: Object
    */
    
    obj2 = { name: 'Jake' };
    /*
    Object
     	name: "Jake"
     	__proto__: Object
    */