每一個對象都有一個propertyIsEnumerable()
方法。此方法返回一個布爾值,代表指定的屬性是不是可枚舉。html
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)瀏覽器
翻譯:oop
此方法能夠肯定對象中的指定屬性是否能夠由
for ... in
循環枚舉,但經過原型鏈繼承的屬性除外。網站
我理解的意思,不知道對不對:
此方法,能夠肯定對象中的指定屬性(除了經過原型鏈繼承的屬性)是否能夠由for...in
循環枚舉。
也就是說:
for...in
循環出來的屬性,除了經過原型鏈繼承的屬性不是可枚舉,其餘都是可枚舉屬性。this
obj.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對象的可枚舉屬性到底有多少個呢?prototype
var arr = [] for(let i in window) { if(window.propertyIsEnumerable(i)) { arr.push(i) } } console.log(arr.length)
這個長度,在每一個網站的值都是不同的,由於他們會各自往window上添加全局屬性。我看到最少的可枚舉屬性值個數爲195翻譯
hasOwnProperty()
方法檢驗是否爲自有屬性。propertyIsEnumberable()
方法,能夠肯定對象中的指定屬性(除了經過原型鏈繼承的屬性)是否能夠由for...in
循環枚舉。 [完]