午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    JavaScript 里的類(lèi)數(shù)組對(duì)象
    來(lái)源:易賢網(wǎng) 閱讀:2203 次 日期:2015-04-09 16:22:26
    溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript 里的類(lèi)數(shù)組對(duì)象”,方便廣大網(wǎng)友查閱!

    很早以前我就知道可以把 arguments 轉(zhuǎn)化為數(shù)組:[].slice.call(arguments),因?yàn)?/p>

    arguments 是個(gè)類(lèi)數(shù)組對(duì)象,所以才可以這么用。但是我一直不清楚什么叫做類(lèi)數(shù)組對(duì)象( array-like objects)

    今天看 Effective JavaScript 就有一節(jié)是專(zhuān)門(mén)講這個(gè)的,感覺(jué)真是太拽了。

    先看我寫(xiě)的一些示例代碼:

    a = "hello"

    [].map.call(a, (e) -> e.toUpperCase()) # => [ 'H', 'E', 'L', 'L', 'O' ]

    [].reduceRight.call(a, (acc, e) -> acc + e) # => 'olleh'

    b = {1: "a", 2: "b", 4: "c", length: 6}

    [].reduce.call(b, (acc, e) -> acc + e) # => 'abc'

    前面那幾個(gè)是操作字符串的,嗯,字符串也可以看成類(lèi)數(shù)組對(duì)象。但是后面那個(gè) b 對(duì)象居然

    也是類(lèi)數(shù)組對(duì)象。

    看書(shū)上的解釋?zhuān)?/p>

    代碼如下:

    So what exactly makes an object “array-like”? The basic contract of

    an array object amounts to two simple rules.

    It has an integer length property in the range 0...2^32 – 1.

    The length property is greater than the largest index of the object.

    An index is an integer in the range 0...2^32 – 2 whose string representation

    is the key of a property of the object.

    居然只有這兩條簡(jiǎn)單的規(guī)則。

    所以為什么 arguments, 字符串,和上面那個(gè) b 對(duì)象可以看作類(lèi)數(shù)組對(duì)象呢?

    它們都有一個(gè)合法的 length 屬性(0 到 2**32 - 1 之間的正整數(shù))。

    length 屬性的值大于它們的最大索引(index)。

    再舉個(gè)例子:

    代碼如下:

    b = {1: "a", 2: "b", 4: "c", length: 3}

    [].reduce.call(b, (acc, e) -> acc + e) # => 'ab'

    嗯,就不對(duì)了,成了'ab' 了,因?yàn)檫`反了規(guī)則2:length 屬性是3,

    最大索引值是4要比 length 屬性大了。所以表現(xiàn)的不正常了。

    太強(qiáng)大了,好像只是定義了一個(gè)接口,只要符合這個(gè)接口,就可以利用數(shù)組的所有方法。

    其實(shí)不是可以利用所有方法,Array.prototype.concat

    是不能用的,因?yàn)樗前褍蓚€(gè)數(shù)組連接起來(lái),你不是數(shù)組肯定是沒(méi)法用它的。

    還有一個(gè)小問(wèn)題是,字符串創(chuàng)建以后是不可變的(immutable),所以你怎么折騰它都是不可變的。

    但是這本書(shū)根本就沒(méi)有解釋為什么是符合這兩個(gè)條件就可以看成類(lèi)數(shù)組對(duì)象,另外這本書(shū)的作者

    是那個(gè)什么 ECMAScript 委員會(huì)的成員,所以基本還是可信的。至于為什么符合這兩個(gè)條件就可以看成是類(lèi)數(shù)組對(duì)象,我也不知道,谷歌搜了半天也沒(méi)看到什么合理的解釋。

    以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

    更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

    更多信息請(qǐng)查看腳本欄目
    易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript 里的類(lèi)數(shù)組對(duì)象
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!

    2025國(guó)考·省考課程試聽(tīng)報(bào)名

    • 報(bào)班類(lèi)型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專(zhuān)用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢(xún)關(guān)注公眾號(hào):hfpxwx
    咨詢(xún)QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)