關於for in 循環


在使用for-in循環時,返回的是所有能夠通過對象訪問的、可枚舉的(enumerated)屬性,其中既包括存在於實例中的屬性,也包括存在於原型中的屬性。屏蔽了原型中不可枚舉屬性(即設置了[[DontEnum]]標記的屬性)的實例屬性也會在for-in循環中返回,因為規定,所有開發人員定義的屬性都是可枚舉的——只有IE除外。

IE的JScript實現中存在一個bug,即屏蔽了不可枚舉屬性的實例屬性不會出現在for-in循環中。例如:

 1 var o = {
 2     toString: function () {
 3         return "My Object";
 4     }
 5 }
 6 
 7 for (var prop in o) {
 8     if (prop == "toString") {
 9         alert("Found toString"); //在IE中不會顯示
10     }
11 }

當以上代碼運行時,應該會顯示一個警告框,表明找到了toString()方法。這里的對象o定義了一個名為toString()的方法,該方法屏蔽了原型中(不可枚舉)的toString()方法。在IE中,由於其實現認為原型的toString()方法被打上了[[DontEnum]]標記就應該跳過該屬性,結果我們就不會看到警告框。該bug會影響默認不可枚舉的所有屬性和方法,包括:hasOwnProperty()、propertyIsEnumerable()、toLocaleString()、toString()和valueOf()。有的瀏覽器也為constructor和prototype屬性打上了[[DontEnum]]標記,但這並不是所有瀏覽器共同的做法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM