<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无码专| 国产成人亚洲精品影院| 久久久久亚洲av无码专区导航 | 亚洲情A成黄在线观看动漫软件| 久久久久久AV无码免费网站下载| 亚洲人成图片小说网站| 久久久久久久99精品免费观看| 国产亚洲人成A在线V网站| 在线免费播放一级毛片| 亚洲国产精品一区二区成人片国内 | 免费观看无遮挡www的小视频| 亚洲理论片在线观看| 2021久久精品免费观看| 亚洲欧美日韩综合久久久| 国产成人免费一区二区三区| 亚洲av无码成人影院一区| 亚洲黄黄黄网站在线观看| 久久国产精品免费一区二区三区| 亚洲午夜福利AV一区二区无码| 毛片在线全部免费观看| 亚洲视频在线观看免费视频| 中文字幕无码不卡免费视频| 亚洲精品色在线网站| 老司机亚洲精品影视www| 久久国产精品免费网站| 亚洲自偷自偷在线成人网站传媒| 在线观看国产情趣免费视频| 国产无遮挡色视频免费观看性色| 亚洲成av人影院| 美女网站免费福利视频| 亚洲av日韩aⅴ无码色老头| 国产亚洲视频在线播放| ww在线观视频免费观看| 女bbbbxxxx另类亚洲| 亚洲国产一二三精品无码| 日韩不卡免费视频| 男女猛烈激情xx00免费视频| 久久香蕉国产线看观看亚洲片| 成年女人色毛片免费看| 日本在线免费播放| 亚洲中文字幕乱码熟女在线|