<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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Array.prototype.concat不是通用方法反駁[譯]_javascript技巧

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

        Array.prototype.concat不是通用方法反駁[譯]_javascript技巧

        Array.prototype.concat不是通用方法反駁[譯]_javascript技巧:ECMAScript 5.1規范§15.4.4.4 中說到: 代碼如下: concat函數是有意設計成通用的;它并不要求它的this值必須得是個Array對象.因此,它可以被轉移到其它類型的對象上作為方法來調用. 本文中的代碼都使用了[]來作為Array.prototype的快捷方式.這
        推薦度:
        導讀Array.prototype.concat不是通用方法反駁[譯]_javascript技巧:ECMAScript 5.1規范§15.4.4.4 中說到: 代碼如下: concat函數是有意設計成通用的;它并不要求它的this值必須得是個Array對象.因此,它可以被轉移到其它類型的對象上作為方法來調用. 本文中的代碼都使用了[]來作為Array.prototype的快捷方式.這

        ECMAScript 5.1規范§15.4.4.4 中說到:
        代碼如下:
        concat函數是有意設計成通用的;它并不要求它的this值必須得是個Array對象.因此,它可以被轉移到其它類型的對象上作為方法來調用.

        本文中的代碼都使用了[]來作為Array.prototype的快捷方式.這已經是很常用的技巧了,雖然可讀性差點:你通過一個對象實例訪問到了Array.prototype上的方法.但是,這樣的訪問方式在現代的JavaScript引擎中非常之快,以至于我懷疑,說不定在這種調用方式下,這些JavaScript引擎可能已經不再創建數組實例了.本文中所有的例子都在Firefox和V8中嘗試運行過.

        讓我們看一下concat到底是不是個通用方法:如果它是一個通用方法,則不管this的值是一個真實數組還是個類數組對象(擁有length屬性,能通過索引訪問每個元素),方法的返回結果都應該是一樣的.我們首先嘗試在數組上調用concat方法:

        代碼如下:
        > ["hello"].concat(["world"])
        ["hello", "world"]

        > [].concat.call(["hello"], ["world"]) // 和上面的一樣
        ["hello", "world"]

        然后,我們使用一個類數組對象來進行上面的連接操作.結果應該是一樣的.
        代碼如下:
        > [].concat.call({ 0: "hello", length: 1 }, ["world"])
        [ { '0': 'hello', length: 1 }, 'world' ]

        特殊變量arguments也是一個類數組對象.結果仍然不是我們所期望的:

        代碼如下:
        > function f() { return [].concat.call(arguments, ["world"]) }
        > f("hello")
        [ { '0': 'hello' }, 'world' ]

        真正的通用方法應該是這樣的Array.prototype.push:
        代碼如下:
        > var arrayLike = { 0: "hello", length: 1 };
        > [].push.call(arrayLike, "world")
        2
        > arrayLike
        { '0': 'hello', '1': 'world', length: 2 }

        譯者注:瀏覽器只是按照標準來實現,所以并不存在bug的問題.

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

        文檔

        Array.prototype.concat不是通用方法反駁[譯]_javascript技巧

        Array.prototype.concat不是通用方法反駁[譯]_javascript技巧:ECMAScript 5.1規范§15.4.4.4 中說到: 代碼如下: concat函數是有意設計成通用的;它并不要求它的this值必須得是個Array對象.因此,它可以被轉移到其它類型的對象上作為方法來調用. 本文中的代碼都使用了[]來作為Array.prototype的快捷方式.這
        推薦度:
        標簽: 方法 反駁 array
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久久久亚洲国产AV麻豆| 亚洲AⅤ无码一区二区三区在线 | 老司机亚洲精品影视www| 亚洲人成网国产最新在线| 国产高清对白在线观看免费91 | 国产精品福利在线观看免费不卡| 四虎免费永久在线播放| 亚洲AV无码专区在线厂| 免费a级毛片网站| 亚洲精品少妇30p| a毛片在线免费观看| 亚洲AV永久纯肉无码精品动漫| 亚洲一区二区久久| 免费A级毛片无码免费视| 亚洲国产精品成人AV无码久久综合影院 | 91精品国产免费久久国语麻豆| 国产免费爽爽视频免费可以看| 天天综合亚洲色在线精品| 国产亚洲精品精品国产亚洲综合 | 深夜免费在线视频| 亚洲s色大片在线观看| 99蜜桃在线观看免费视频网站| 午夜亚洲av永久无码精品| 国产精品免费一区二区三区| 久久精品国产亚洲AV麻豆王友容 | 成人免费乱码大片A毛片| 手机在线看永久av片免费| 亚洲国产精品成人综合色在线| 亚洲国产综合久久天堂| 免费观看成人久久网免费观看| 亚洲中文无码av永久| 亚洲精品A在线观看| 一区二区在线免费观看| 国产亚洲精品精华液| 国产高清不卡免费在线| 国产亚洲人成在线影院| 在线免费观看一级片| 亚洲视频一区二区在线观看| 国产一区二区三区免费观看在线| 亚洲欧洲国产经精品香蕉网| 又大又硬又爽免费视频|