不存在的數組元素

來源:互聯網
上載者:User

數組字面量是個神奇東西,試在chrome的控制台列印如下內容:

>>>[][]>>>[,][]>>>[,,][]

但這不是真相,我們用Firefox的firebug看看:

>>> [][]>>> [,][undefined]>>> [,,][undefined, undefined]

這種顯示方式類似其他語言的inspect方法,我們不妨再看看其toString方法:

>>> [].toString()"">>> [,].toString()"">>> [,,].toString()","

我們發現最一個逗號總是被省去的,本來應該是兩個元素夾半一個逗號,現在[,]裡面只有一個元素undefined

>>>[,].length1

我們再用ecma262v5新增的元編程方法,Object.getOwnPropertyDescriptor看看。此方法是用於查看某個對象的某個屬性對應的特徵描述。

>>>Object.getOwnPropertyDescriptor([,], 0)  undefined //由於它基本不存在第一個元素(索引值為0),因此當然沒有對應的特徵描述

相對應,如果它存在元素,即使其值為undefined

>>>Object.getOwnPropertyDescriptor([undefined], 0) //chrome 的結果Object   configurable: true   enumerable: true   value: undefined   writable: true   __proto__: Object//=============================================================>>> Object.getOwnPropertyDescriptor([undefined], 0) //firebug的結果Object { writable=true, enumerable=true, configurable=true}

但當然,上面的都是非常規範與超前的東西,這些東西在IE下可能就行不通了,如[,].length在IE678顯示為2!更多怪異的現象見下面這個比較,對於數組的undefined元素不同產生方式,其可遍曆性也不一樣。

      var a1 = [,,,];      var a2 = new Array(3);      var a3 = [undefined,undefined,undefined];           alert(0 in a1);      alert(0 in a2);      alert(0 in a3);      //FF4     false false true      //opera10 false false true      //chrome  false false true      //IE6     false false false      //IE8     false false false      //IE8     false false false      //IE9     false false true      //IE10p   false false true      //搜狗2.2 false false true      //360極速 false false true

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.