질문 : 객체에 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
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
Javascript Date 객체를 복제하는 방법 (0) | 2021.10.26 |
---|---|
React.js의 배열 자식에 대한 고유 키 이해 (0) | 2021.10.25 |
Node.js : 줄 바꿈없이 콘솔에 출력하는 방법 (0) | 2021.10.25 |
React js onClick으로 메소드에 값을 전달하는 방법 (0) | 2021.10.21 |
Javascript에서 조건부로 객체에 멤버를 추가하는 방법 (0) | 2021.10.20 |