在yuiblog上的article Douglas Crockford說for in
語句將迭代對象的方法。爲什麼下面的代碼不會生成[「a」,「b」,「c」,「d」,「toString」]?是不是.toString()和my_obj的其他方法成員?JavaScript for in循環是否遍歷方法?
Object.prototype.toString = function(){return 'abc'}
Object.prototype.d = 4;
my_obj = {
'a':1,
'b':2,
'c':3
}
a = []
for (var key in my_obj) {
a.push(key)
}
console.log(a) // prints ["a", "b", "c", "d"]
沒錯,'Object.prototype.toString.propertyIsEnumerable()== FALSE' – CMS 2010-03-30 01:52:29
從你鏈接的文檔:「A for ... in循環不會遍歷內置屬性這些。包括所有對象的內置方法,比如String的indexOf方法或者Object的toString方法,但是循環將迭代所有用戶定義的屬性(包括覆蓋內置屬性的任何屬性)。 爲什麼文檔中說如果在我的例子.toString()中沒有覆蓋「包含覆蓋內建屬性的任何內容」? – hekevintran 2010-03-30 02:21:26
@hekevintran:更新了我的答案。 – 2010-03-30 02:45:03