object.propertyIsEnumerable("propertyName");
引數說明:propertyName 參數列示要檢測的屬性名稱。var person = { 'first-name' : 'zhang', 'last-name' : 'san', sayName : function () { console.log(this['first-name'] + this['last-name']); } }; console.log('first-name' in person); //true console.log(person.hasOwnProperty('first-name')); //true console.log('toString' in person); //true console.log(person.hasOwnProperty('toString')); //false
for (var name in person) { if (typeof person[name] != 'function') { //排除所有方法 console.log(name + ':' + person[name]); } }使用 for/in 語句列舉,屬性名出現的順序是不確定的,最好的辦法就是完全避免使用 for/in 語句,可以建立一個陣列,在其中以正確的順序包含屬性名。通過使用 for/in 語句,可以不用擔心可能會出現原型屬性,並且按正確的順序取得它們的值。
var properties = ['sayName', 'first-name', 'last-name']; //使用陣列定義列舉順序 for (var i = 0; i < properties.length; i ++) { console.log(properties[i] + ':' + person[properties[i]]); }對於 JavaScript 物件來說,使用者可以使用 for/in 語句遍歷一個物件“可列舉”的屬性。但並不是所有物件屬性都可以列舉,只有使用者自定義的自有屬性和原型屬性才允許列舉。
function F() { this.a = 1; this.b = 2; } F.prototype.c = 3; F.d = 4; var o = new F(); for (var I in o) { console.log(I); }
console.log(o.propertyIsEnumerable("a")); //返回值為true,說明可以列舉 console.log(o.propertyIsEnumerable("b")); //返回值為true,說明可以列舉 console.log(o.propertyIsEnumerable("c")); //返回值為false,說明不可以列舉 console.log(o.propertyIsEnumerable("d")); //返回值為false,說明不可以列舉 var o = F; console.log(o.propertyIsEnumerable("d")); //返回值為true,說明可以列舉