js 속성 대상의propertyIsEnumerable 방법

2259 단어

정의


대상마다 propertyIsEnumerable() 방법이 있습니다.이 방법은 지정한 속성이 열거할 수 있는지 여부를 나타내는 브리 값을 되돌려줍니다.
This method can determine whether the specified property in an object can be enumerated by a for...in loop, with the exception of properties inherited through the prototype chain. (출처 MDN)
번역:
이 방법은 대상의 지정한 속성이 for ... in에 순환적으로 매거될 수 있는지 확인할 수 있지만 원형 체인을 통해 계승된 속성은 제외된다.
이 방법은 대상 중의 지정된 속성(원형 체인을 통해 계승된 속성 제외)이 for...in에서 순환적으로 매거될 수 있는지 확인할 수 있다.즉, for...in 순환된 속성은 원형 체인을 통해 계승된 속성을 제외하고는 모두 매거할 수 있는 속성이 아니다.

용법 예시


사용방법propertyIsEnumerable(prop)로 열거 가능 여부를 판단합니다.

const obj = {};
const arr = [];
obj.name= 'weiqinl';
arr[0] = 2018;
console.log(obj.propertyIsEnumerable('name'));  // true
console.log(arr.propertyIsEnumerable(0)); // true
console.log(arr.propertyIsEnumerable('length')); // false

대상의 열거 가능한 속성을 찾아내다

function Person(name,age) {
    this.name = name
    this.age = age
    this.say = function() {
        console.log('say hi')
    }
}
Person.prototype.where = 'beijing' //  
var p = new Person('weiqinl', 18)  //  
p.time = '2018'    //  
let arr = []
for(let i in p) {
    console.log(i, p.propertyIsEnumerable(i))
    p.propertyIsEnumerable(i)? arr.push(i) : ''
}
console.log(arr)
// name true
// age true
// say true
// time true
// where false
// (4) ["name", "age", "say", "time"]

브라우저의 window 대상의 열거 가능한 속성


window 대상의 열거 가능한 속성은 도대체 몇 개입니까?
var arr = []
for(let i in window) {
    if(window.propertyIsEnumerable(i)) {
        arr.push(i)
    }
}
console.log(arr.length) 

이 길이는 사이트마다 값이 다르다. 왜냐하면 그들은 각자 윈도우에 전역 속성을 추가하기 때문이다.나는 가장 적은 열거 가능한 속성 값의 개수가 195이라는 것을 보았다

hasOwnProperty와의 차이점

  • hasOwnProperty() 방법은 자체 속성인지 검사한다.
  • propertyIsEnumberable() 방법은 대상 중의 지정된 속성(원형 체인을 통해 계승된 속성 제외)이 for...in에 순환적으로 매거될 수 있는지 확인할 수 있다.[끝]
  • 좋은 웹페이지 즐겨찾기