(1)在js中,物件的屬性分為可列舉和不可列舉,它們是由屬性的enumerable值決定的,不可列舉屬性,用for...in是遍歷不到的,js中內建屬性是遍歷不到的。
舉個例子:
function p(){
this.a ='nihao';
this.b ='yes';
this.c =function(){
console.log('1');
p.prototype.look = function(){
console.log('2');
var b = new p();
for(var i in b){
console.log(b[i]);
這時候,我們可以遍歷到物件b的所有可列舉屬性,其中包括從原型繼承來的。
but...
console.log(object.keys(b))得到的結果卻只是自身屬性。
and...
console.log(json.stringify(b))得到的結果也是自身屬性,但是不包括函式在內。
es5中提供了乙個方法,用於遍歷所有屬性(不論是否是可列舉的)
object.defineproperty(b,'age',{
value:18,
enumerable:false
console.log(object.getownpropertynames(b))這樣就得到了所有的屬性。
(2)其中,定義object物件的prototypeisenumerable()方法可以判斷此物件是否包含某個屬性,並且這個屬性是否可列舉。
js中的列舉和不可列舉
列舉是指物件中的屬性是否可以遍歷出來,再簡單點說就是屬性是否可以以列舉出來。1.for in迴圈可以列舉 遍歷 出物件本身具有的屬性,通過object.defineproperty 方法加的可列舉屬性,或者通過原型物件繫結的可以列舉屬性。function enumer enumer.prototyp...
js中的列舉型別和不可列舉型別
列舉 是指物件中的屬性可以遍歷出來,再簡單點就是屬性可以列舉出來。可列舉性決定了這個屬性能否被for in查詢遍歷到。js中基本包裝型別的原型屬性是不可列舉的,如object,array,number等,如果你寫出這樣的 遍歷其中的屬性 var num new number for var pro ...
列舉數與可列舉型別
列舉數 可以理解為指向類成員的指標 可列舉型別 可以列舉的型別,必須具有getenumerator 方法 列舉數有三種型別 1.ienmverator ienumerable介面,非泛型介面形式 2.ienmverator ienumerable泛型介面 3.不使用介面形式 非泛型列舉介面 ienu...