프로그래밍 언어/HTML,CSS,JS

객체에 JavaScript의 특정 속성이 있는지 확인하는 방법

Rateye 2021. 10. 25. 11:22
728x90
반응형
질문 : 객체에 JavaScript의 특정 속성이 있는지 어떻게 확인합니까?

객체에 JavaScript의 특정 속성이 있는지 어떻게 확인합니까?

중히 여기다:

x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
    //Do this
}

그게 최선의 방법인가요?

답변

나는 주어진 답변에 대해 정말 혼란 스럽습니다. 대부분은 완전히 틀 렸습니다. 물론 정의되지 않은 값, null 또는 false 값이있는 개체 속성을 가질 수 있습니다. 따라서 단순히 속성 검사를 typeof this[property] 또는 더 나쁜 경우 x.key 완전히 잘못된 결과를 얻을 수 있습니다.

찾고있는 것에 따라 다릅니다. 객체가 물리적으로 속성을 포함하고 있는지 (그리고 프로토 타입 체인의 어딘가에서 오는 것이 아님) object.hasOwnProperty 를 선택하면됩니다. 모든 최신 브라우저가이를 지원합니다. (이전 버전의 Safari-2.0.1 및 이전 버전에서는 누락되었지만 해당 버전의 브라우저는 더 이상 거의 사용되지 않습니다.)

당신이 찾고있는 것은 객체에 반복 가능한 속성이 있다면 (객체의 속성을 반복 할 때 나타납니다) 다음을 수행하십시오 : prop in object 는 원하는 효과를 줄 것입니다.

hasOwnProperty 사용하는 것이 아마도 원하는 것이므로 대체 방법을 원할 수 있다는 점을 고려하여 다음 솔루션을 제시합니다.

var obj = {
    a: undefined,
    b: null,
    c: false
};

// a, b, c all found
for ( var prop in obj ) {
    document.writeln( "Object1: " + prop );
}

function Class(){
    this.a = undefined;
    this.b = null;
    this.c = false;
}

Class.prototype = {
    a: undefined,
    b: true,
    c: true,
    d: true,
    e: true
};

var obj2 = new Class();

// a, b, c, d, e found
for ( var prop in obj2 ) {
    document.writeln( "Object2: " + prop );
}

function hasOwnProperty(obj, prop) {
    var proto = obj.__proto__ || obj.constructor.prototype;
    return (prop in obj) &&
        (!(prop in proto) || proto[prop] !== obj[prop]);
}

if ( Object.prototype.hasOwnProperty ) {
    var hasOwnProperty = function(obj, prop) {
        return obj.hasOwnProperty(prop);
    }
}

// a, b, c found in modern browsers
// b, c found in Safari 2.0.1 and older
for ( var prop in obj2 ) {
    if ( hasOwnProperty(obj2, prop) ) {
        document.writeln( "Object2 w/ hasOwn: " + prop );
    }
}

hasOwnProperty 대한 작동하는 브라우저 간 솔루션이며 한 가지주의 사항이 있습니다. 동일한 속성이 프로토 타입과 인스턴스에있는 경우를 구분할 수 없습니다. 단지 프로토 타입에서 나온 것이라고 가정합니다. 상황에 따라 좀 더 관대하거나 엄격하게 바꿀 수 있지만, 적어도 이것은 더 도움이 될 것입니다.

출처 : https://stackoverflow.com/questions/135448/how-do-i-check-if-an-object-has-a-specific-property-in-javascript
728x90
반응형