<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        為JS擴展Array.prototype.indexOf引發的問題及解決辦法_基礎知識

        來源:懂視網 責編:小采 時間:2020-11-27 21:33:18
        文檔

        為JS擴展Array.prototype.indexOf引發的問題及解決辦法_基礎知識

        為JS擴展Array.prototype.indexOf引發的問題及解決辦法_基礎知識:Array沒有indexOf方法,這樣在一個數組中查找某個元素的索引時比較麻煩,為了調用方便,于是通過prototype原型擴展了Array.prototype.indexOf(),這樣用起來就比較方便了。但是這個自定義的indexOf在對數組進行遍歷的時候卻出現了問題。 代碼如下: Ar
        推薦度:
        導讀為JS擴展Array.prototype.indexOf引發的問題及解決辦法_基礎知識:Array沒有indexOf方法,這樣在一個數組中查找某個元素的索引時比較麻煩,為了調用方便,于是通過prototype原型擴展了Array.prototype.indexOf(),這樣用起來就比較方便了。但是這個自定義的indexOf在對數組進行遍歷的時候卻出現了問題。 代碼如下: Ar

        Array沒有indexOf方法,這樣在一個數組中查找某個元素的索引時比較麻煩,為了調用方便,于是通過prototype原型擴展了Array.prototype.indexOf(),這樣用起來就比較方便了。但是這個自定義的indexOf在對數組進行遍歷的時候卻出現了問題。

        代碼如下:
        Array.prototype.indexOf = function(item) {
        for (var i = 0; i < this.length; i++) {
        if (this[i] == item)
        return i;
        }
        return -1;
        }

        用的時候直接

        代碼如下:
        var arr=[1,2,3,4,5];
        var index=arr.indexOf(1); //index==0

        擴展了以后,用起來很爽很方便,一片和諧景象...

        但是某次是遍歷數組元素的時候,使用for..in..循環,引發了其他的問題,打破了這個和諧的氛圍。

        代碼如下:
        var a=["張飛","關羽","劉備","呂布"];
        for(var p in a){
        document.write(p+"="+a[p]+"
        ");
        }

        本來想輸出這四個人的名字,結果輸出的是什么呢?

        輸出的居然是:

        代碼如下:
        //0=張飛
        //1=關羽
        //2=劉備
        //3=呂布
        //indexOf=function(item) { for (var i = 0; i < this.length; i++) { if (this[i] == item) return i; } return -1; }

        除了把名字打出來以外,還額外輸出了自己擴展的方法indexOf,但是令人瘋狂的是,firefox卻是“正常”的,只有四個人的人名,為什么會這樣?

        輸出indexOf,自己擴展的,可以理解,畢竟for..in是遍歷一個對象的所有用戶定義的屬性或者一個數組的所有元素。

        那么firefox為什么不會?

        后來查了資料才明白,

        Array在javascript1.6版本已經支持Array.indexOf(),而我用的firefox是3.5版本,已經支持javascript1.8了,indexOf是其Array本身固有的方法了。

        而IE,即使我用的是IE8,也才支持到javascript1.3版本。

        所以IE8認為indexOf是“用戶定義的屬性”,而firefox認為是自己原生支持的固有的屬性。

        真的是這樣嗎?

        做個實驗,把indexOf更名為myIndexOf,再試試,結果IE和firefox都輸出myIndexOf,證明前面的觀點是正確。

        那么又來了個問題,我擴展indexOf很久了,現在不少項目的代碼都已經在使用這個方法,而現在我非要使用for..in輸出數組本身的元素,不要其他我自己擴展到俄方法,怎么辦?

        好在javascript提供了hasOwnProperty方法。

        看一下其描述:

        代碼如下:
        Every object descended from Object inherits the hasOwnProperty method. This method can be used to determine whether an object has the specified property as a direct property of that object; unlike the in operator, this method does not check down the object's prototype chain

        看描述,就是我們想要的東西。

        在for...in..里做個 判斷就OK了

        代碼如下:
        if(a.hasOwnProperty(p)){
        document.write(p+"="+a[p]+"
        ");
        }

        另外,附上hasOwnProperty用法示例,來源于互聯網:

        代碼如下:
        function Book(title, author) {
        this.title = title;
        this.author = author;
        }
        Book.prototype.price = 9.99;
        Object.prototype.copyright = "herongyang.com";
        var myBook = new Book("JavaScript Tutorials", "Herong Yang");
        // Dumping built-in properties at the base prototype level
        document.writeln("/nObject.prototype's built-in properties:");
        dumpProperty(Object.prototype, "constructor");
        dumpProperty(Object.prototype, "hasOwnProperty");
        dumpProperty(Object.prototype, "isPrototypeOf");
        dumpProperty(Object.prototype, "toString");
        dumpProperty(Object.prototype, "valueOf");
        dumpProperty(Object.prototype, "copyright");
        // Dumping built-in properties at the my prototype level
        document.writeln("/n==================/nBook.prototype's built-in properties:");
        dumpProperty(Book.prototype, "constructor");
        dumpProperty(Book.prototype, "hasOwnProperty");
        dumpProperty(Book.prototype, "isPrototypeOf");
        dumpProperty(Book.prototype, "toString");
        dumpProperty(Book.prototype, "valueOf");
        dumpProperty(Book.prototype, "copyright");
        // Dumping built-in properties at the object level
        document.writeln("/n==================/nmyBook's built-in properties:");
        dumpProperty(myBook, "constructor");
        dumpProperty(myBook, "hasOwnProperty");
        dumpProperty(myBook, "isPrototypeOf");
        dumpProperty(myBook, "toString");
        dumpProperty(myBook, "valueOf");
        dumpProperty(myBook, "copyright");
        function dumpProperty(object, property) {
        var inheritance;
        if (object.hasOwnProperty(property))
        inheritance = "Local";
        else
        inheritance = "Inherited";
        document.writeln(property+": "+inheritance+": "
        +object[property]);
        }

        查看瀏覽器支持javascript到哪個版本:

        代碼如下:




        瀏覽器的JavaScript版本支持測試


        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        為JS擴展Array.prototype.indexOf引發的問題及解決辦法_基礎知識

        為JS擴展Array.prototype.indexOf引發的問題及解決辦法_基礎知識:Array沒有indexOf方法,這樣在一個數組中查找某個元素的索引時比較麻煩,為了調用方便,于是通過prototype原型擴展了Array.prototype.indexOf(),這樣用起來就比較方便了。但是這個自定義的indexOf在對數組進行遍歷的時候卻出現了問題。 代碼如下: Ar
        推薦度:
        標簽: 解決 js 問題
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲男人的天堂一区二区| 青青青国产在线观看免费| 亚洲高清免费视频| 无码一区二区三区亚洲人妻| 好大好硬好爽免费视频| 亚洲av无码有乱码在线观看| 成人免费看吃奶视频网站| 亚洲男同gay片| 国产高清免费的视频| 狠狠热精品免费观看| 亚洲福利在线播放| 国产午夜无码精品免费看| 久久久亚洲欧洲日产国码农村| 久久久久久国产精品免费免费男同 | 看免费毛片天天看| 亚洲裸男gv网站| 在线观看片免费人成视频无码| 久久亚洲私人国产精品vA| 国产情侣激情在线视频免费看| 亚洲不卡中文字幕| 免费A级毛片在线播放不收费| 国产A∨免费精品视频| 久久久久亚洲AV成人无码网站| 最近2022中文字幕免费视频| 亚洲第一男人天堂| 亚洲AV无码乱码精品国产| 你懂的免费在线观看| 亚洲成人免费电影| 免费a级毛片18以上观看精品| 中文在线免费视频| 久久国产亚洲精品| 不卡一卡二卡三亚洲| 亚洲天堂免费在线| 又大又硬又粗又黄的视频免费看| 亚洲AV永久无码区成人网站| 中文字幕人成无码免费视频 | 亚洲 欧洲 日韩 综合在线| 亚洲国产91精品无码专区| 午夜网站在线观看免费完整高清观看| 亚洲免费观看网站| 亚洲最大AV网站在线观看|