在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ for in 循環(huán)
arguments 對象
類型轉(zhuǎn)換
構(gòu)造函數(shù)
instanceof 操作符
自動分號插入
為什么不要使用 eval
對象使用和屬性
作用域與命名空間
this 的工作原理
typeof 操作符
相等與比較
閉包和引用
數(shù)組遍歷與屬性
Array 構(gòu)造函數(shù)
原型
hasOwnProperty 函數(shù)
undefined 和 null
函數(shù)聲明與表達式
setTimeout 和 setInterval
for in 循環(huán)

for in 循環(huán)

in 操作符一樣,for in 循環(huán)同樣在查找對象屬性時遍歷原型鏈上的所有屬性。

注意: for in 循環(huán)不會遍歷那些 enumerable 設(shè)置為 false 的屬性;比如數(shù)組的 length 屬性。

    // 修改 Object.prototype
    Object.prototype.bar = 1;

    var foo = {moo: 2};
    for(var i in foo) {
        console.log(i); // 輸出兩個屬性:bar 和 moo
    }

由于不可能改變 for in 自身的行為,因此有必要過濾出那些不希望出現(xiàn)在循環(huán)體中的屬性, 這可以通過 Object.prototype 原型上的hasOwnProperty函數(shù)來完成。

注意: 由于 for in 總是要遍歷整個原型鏈,因此如果一個對象的繼承層次太深的話會影響性能。

使用 hasOwnProperty 過濾

    // foo 變量是上例中的
    for(var i in foo) {
        if (foo.hasOwnProperty(i)) {
            console.log(i);
        }
    }

這個版本的代碼是唯一正確的寫法。由于我們使用了 hasOwnProperty,所以這次輸出 moo。 如果不使用 hasOwnProperty,則這段代碼在原生對象原型(比如 Object.prototype)被擴展時可能會出錯。

一個廣泛使用的類庫 Prototype 就擴展了原生的 JavaScript 對象。 因此,當(dāng)這個類庫被包含在頁面中時,不使用 hasOwnProperty 過濾的 for in 循環(huán)難免會出問題。

總結(jié)

推薦總是使用 hasOwnProperty。不要對代碼運行的環(huán)境做任何假設(shè),不要假設(shè)原生對象是否已經(jīng)被擴展了。