前端複習 物件的可列舉屬性

2021-07-23 07:19:33 字數 1254 閱讀 8927

初學時,並不是很注意這些細節的東西,但是程式設計師寫**的時候,怎麼會容忍胡而麻三的記憶.

1 for in 語句的複習--問題引出

var ******** = ;

function colored********()

colored********.prototype = ********;

var obj = new colored********();

for (var prop in obj)

}// output:

// "o.color = red"

for in 會順著原型鏈,把可列舉屬性都列舉出來; 如果只想列舉自己的屬性,可以像上述例子使用hasownproperty來過濾.

2 以上**相當於呼叫object.keys(obj);

object.keys()

方法會返回乙個由給定物件的所有可列舉自身屬性的屬性名組成的陣列,陣列中屬性名的排列順序和使用

for-in迴圈遍歷該物件時返回的順序一致(兩者的主要區別是 for-in 還會遍歷出乙個物件從其原型鏈上繼承到的可列舉屬性)。

3 那我就要問了,什麼是物件的可列舉屬性

for...in迴圈只遍歷可列舉屬性。像 array 和 object 使用內建建構函式所建立的物件都會繼承自 object.prototype 和 string.prototype 的不可列舉屬性,例如 

string

indexof()方法或者object 的tostring方法。

4 最新一次看看到這個問題,這裡需要補充一下:

乙個屬性是否可列舉也跟從哪個物件的角度看有關:

對於乙個物件來說,任何來自原型鏈上的屬性都是不可列舉的: obj.propertyisenumerable('a')  //false

而如果propertyisenumerable的呼叫時來自原型鏈上的某個物件,那麼這個屬性就是可列舉的: obj.constructor.prototype.propertyisenumerable('a') //true   那為什麼在for in 的時候,這些屬性都能看到呢?可以推斷,當順著原型鏈找到這些變數的時候,就是從原型物件上看這些屬性為可列舉的!!!????

不可列舉屬性 都有哪些?

物件屬性可列舉,表示該屬性的值不可修改,可認為該屬性是常量。

enumerable 可列舉 屬性

乙個物件的可列舉屬性會在for.in中被訪問到 或是類似的迭代方法,object.keys 如果乙個屬性不是可列舉的,迴圈會忽略這個屬性 varobj console.log tostring in obj trueconsole.log typeofobj.tostring function fo...

物件屬性特性(可寫,可列舉,可配置)

物件屬性的特性 var obj1 new object object.defineproperty obj1,y 分析 首先 第一行 var obj1 new object 表示建立乙個空物件,相當於 var obj1 叫做 物件字面量 前提是new object 中沒有傳入引數,才與 一樣 obj...

列舉物件中的屬性

迴圈將遍歷物件本身的所有可列舉屬性,以及物件從其建構函式原型中繼承的屬性 更接近原型鏈中物件的屬性覆蓋原型屬性 語法 for var 變數 in 物件 物件中有幾個屬性 包括繼承自其建構函式的原型的可列舉的屬性 迴圈體就會有執行幾次。var obj for var n in obj 輸出 hello...