Object.getOwnPropertyNames 대 Object.keys
자바 스크립트 Object.getOwnPropertyNames
와 Object.keys
자바 스크립트 의 차이점은 무엇입니까 ? 또한 일부 예가 이해 될 것이다.
약간의 차이가 있습니다. 객체의 모든 속성을 Object.getOwnPropertyNames(a)
반환 합니다 . 열거 가능한 모든 자체 속성을 반환 합니다 . 즉, 객체 속성 중 일부를 만들지 않고 객체 속성을 정의하면 이 두 가지 방법으로 동일한 결과를 얻을 수 있습니다.a
Object.keys(a)
enumerable: false
테스트하기 쉽습니다.
var a = {};
Object.defineProperties(a, {
one: {enumerable: true, value: 'one'},
two: {enumerable: false, value: 'two'},
});
Object.keys(a); // ["one"]
Object.getOwnPropertyNames(a); // ["one", "two"]
속성 속성 설명자를 제공하지 않고 속성을 정의하는 경우 (사용하지 않음을 의미 Object.defineProperties
) 예를 들면 다음과 같습니다.
a.test = 21;
그런 속성은 자동으로 열거 가능하고 두 방법 모두 동일한 배열을 생성합니다.
또 다른 차이점은 배열 Object.getOwnPropertyNames
메서드가 추가 속성 인을 반환한다는 것입니다 length
.
var x = ["a", "b", "c", "d"];
Object.keys(x); //[ '0', '1', '2', '3' ]
Object.getOwnPropertyNames(x); //[ '0', '1', '2', '3', 'length' ]
객체 생성시 리터럴 표기법 vs 생성자 여기에 나를 얻는 것이 있습니다.
const cat1 = {
eat() {},
sleep() {},
talk() {}
};
// here the methods will be part of the Cat Prototype
class Cat {
eat() {}
sleep() {}
talk() {}
}
const cat2 = new Cat()
Object.keys(cat1) // ["eat", "sleep", "talk"]
Object.keys(Object.getPrototypeOf(cat2)) // []
Object.getOwnPropertyNames(cat1) // ["eat", "sleep", "talk"]
Object.getOwnPropertyNames(Object.getPrototypeOf(cat2)) // ["eat", "sleep", "talk"]
cat1 // {eat: function, sleep: function, talk: function}
cat2 // Cat {}
// a partial of a function that is used to do some magic redeclaration of props
function foo(Obj) {
var propNames = Object.keys(Obj);
// I was missing this if
// if (propNames.length === 0) {
// propNames = Object.getOwnPropertyNames(Obj);
// }
for (var prop in propNames) {
var propName = propNames[prop];
APIObject[propName] = "reasign/redefine or sth";
}
}
따라서 내 경우 foo
cat2 유형의 객체를 제공하면 함수가 작동하지 않았습니다.
객체를 만드는 다른 방법이 있으므로 거기에 다른 꼬임이있을 수 있습니다.
또 다른 차이점은 (적어도 nodejs와 함께) "getOwnPropertyNames"함수는 키 순서를 보장하지 않으므로 일반적으로 "키"함수를 사용합니다.
Object.keys(o).forEach(function(k) {
if (!o.propertyIsEnumerable(k)) return;
// do something...
});
참고 URL : https://stackoverflow.com/questions/22658488/object-getownpropertynames-vs-object-keys
'Programming' 카테고리의 다른 글
프로토 타입 기반 대 클래스 기반 상속 (0) | 2020.05.12 |
---|---|
변경 사항이 업스트림에 존재할 때 git status show branch가 최신 상태 인 이유는 무엇입니까? (0) | 2020.05.12 |
자녀의 자식 값을 기반으로 요소를 선택하는 XPath (0) | 2020.05.12 |
파이썬 클래스의 문자열 표현을 어떻게 변경합니까? (0) | 2020.05.12 |
Android에서 JS 번들을로드하지 못했습니다. (0) | 2020.05.12 |