亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于js中for in的缺陷淺析

 更新時間:2013年12月02日 15:07:46   作者:  
這篇文章主要介紹了js中for in的缺陷,有需要的朋友可以參考一下

for in 語句用來列舉對象的屬性(成員),如下

復制代碼 代碼如下:

var obj = { name:"jack",
      getName:function(){return this.name}
};
//輸出name,getName   
for(var atr in obj) {
    alert(atr);
}

注意了嗎,沒有輸出obj的toString,valueOf等內(nèi)置屬性(或稱內(nèi)置成員,隱藏屬性和預定義屬性)。即for in用來列舉對象的顯示成員(自定義成員)。

如果重寫了內(nèi)置屬性呢,下面就重寫obj的toString

復制代碼 代碼如下:

var obj = {name:"jack",
      getName:function(){return this.name},
      toString:function(){return "I'm jack."}
}
for(var atr in obj) {
    alert(atr);
}

會輸出什么呢?
1、IE6/7/8 下和沒有重寫toString一樣,仍然只輸出name,getName
2、IE9/Firefox/Chrome/Opera/Safari下則輸出name,getName,toString

如果給內(nèi)置原型添加屬性/方法,那么for in時也是可遍歷的

復制代碼 代碼如下:

Object.prototype.clone = function() {}
var obj = {
    name: 'jack',
    age: 33
}
// name, age, clone
for (var n in obj) {
    alert(n)
}

給Object.prototype添加了方法clone,for in時所有瀏覽器都顯示了clone。

這或許還沒什么,因為一般不建議去擴展內(nèi)置構(gòu)造器的原型,這也是Prototype.js走向沒落的原因之一。jQuery和Underscore沒有擴展自原型,前者在jQuery對象上做文章,后者索性將所有方法都掛在下劃線上。

但有時我們?yōu)榱思嫒軪S5或后續(xù)版本,會在不支持ES5的瀏覽器上(IE6/7/8)去擴展內(nèi)置構(gòu)造器的原型,這時for in在各瀏覽器中就不同了。如下

復制代碼 代碼如下:

if (!Function.prototype.bind) {
    Function.prototype.bind = function(scope) {
        var fn = this
        return function () {
            fn.apply(scope, arguments)
        }
    }
}
function greet(name) { 
    alert(this.greet + ', ' + name)
}
for (var n in greet) {
    alert(n)
}

IE6/7/8輸出了bind,其它瀏覽器則無。因為現(xiàn)代瀏覽器中bind是原生支持的,for in不到,IE6/7/8則是給Function.prototype添加了bind。

總結(jié)下:在跨瀏覽器的設(shè)計中,我們不能依賴于for in來獲取對象的成員名稱,一般使用hasOwnProperty來判斷下。

相關(guān)文章

  • JavaScript正則表達式中g(shù)標志詳解

    JavaScript正則表達式中g(shù)標志詳解

    正則的思想都是一樣的,但是具體的寫法會有所不同,下面這篇文章主要給大家介紹了關(guān)于JavaScript正則表達式中g(shù)標志的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • JavaScript中reduce()詳解及使用方法

    JavaScript中reduce()詳解及使用方法

    reduce()方法接收一個函數(shù)做為累加器,數(shù)組中的每一個值(從左到右)開始縮減,最終計算為一個值,下面這篇文章主要給大家介紹了關(guān)于JavaScript中reduce()詳解及使用方法的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • JavaScript正則獲取地址欄中參數(shù)的方法

    JavaScript正則獲取地址欄中參數(shù)的方法

    這篇文章主要介紹了JavaScript正則獲取地址欄中參數(shù)的方法,涉及javascript基于正則的字符串截取操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-03-03
  • JS中的Date()使用小結(jié)

    JS中的Date()使用小結(jié)

    Date() 日期對象是一個構(gòu)造函數(shù)必須使用new來調(diào)用創(chuàng)建我們的日期對象,本文給大家介紹JS中的Date()使用小結(jié),感興趣的朋友一起看看吧
    2024-01-01
  • js控制分頁打印、打印分頁示例

    js控制分頁打印、打印分頁示例

    分頁打印的實現(xiàn)方法有很多,本文為大家介紹的使用js來完成這個需求,感興趣的朋友可以參考下
    2014-02-02
  • webpack常用配置項配置文件介紹

    webpack常用配置項配置文件介紹

    這篇文章主要為大家詳細介紹了webpack常用配置項配置文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 新手入門js閉包學習過程解析

    新手入門js閉包學習過程解析

    這篇文章主要介紹了新手入門js閉包學習過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • webpack組織模塊打包Library的原理及實現(xiàn)

    webpack組織模塊打包Library的原理及實現(xiàn)

    這篇文章主要介紹了webpack組織模塊打包Library的原理及實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • js操作iframe父子窗體示例

    js操作iframe父子窗體示例

    這篇文章主要介紹了js如何操作iframe父子窗體,需要的朋友可以參考下
    2014-05-05
  • JavaScript一元正號運算符示例代碼

    JavaScript一元正號運算符示例代碼

    這篇文章主要給大家介紹了關(guān)于JavaScript一元正號運算符的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JavaScript具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06

最新評論