成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

處理for-in用在數(shù)組上時(shí)候出現(xiàn)的詭異現(xiàn)象的問(wèn)題

huangjinnan / 2746人閱讀

摘要:在第一次循環(huán)的時(shí)候的值為,此后依次為。所以就出現(xiàn)了上面的問(wèn)題。此外,在下打印的時(shí)候可能與在中打印出現(xiàn)不同的結(jié)果。尤其是是這種牽扯到數(shù)組下標(biāo)的盡量不要使用來(lái)處理,如果非要使用可以做如下處理以避免如上的問(wèn)題。

問(wèn)題復(fù)現(xiàn)
var arr = ["a", "b", "c"];
var sid = ["Go"];
for (var key in arr) {
    sid[key + 1] = arr[key];
}
console.log(sid)

很簡(jiǎn)單的問(wèn)題,最后的輸出結(jié)果卻是:

[ "Go", , , , , , , , , , , "b", , , , , , , , , , "c" ]
問(wèn)題分析

通過(guò)上面的輸入結(jié)果我們可以發(fā)現(xiàn)這么幾個(gè)問(wèn)題:

sid里面多了很多空項(xiàng),length明顯的增多了

arr[0]的值在sid中沒(méi)有出現(xiàn)

問(wèn)題1:sid里面多了很多空項(xiàng),length明顯的增多了

略過(guò)痛苦的分析步驟直接來(lái)重點(diǎn)內(nèi)容:
通過(guò)打印key + 1我們可以找到問(wèn)題的關(guān)鍵。通過(guò)打印我們可以得到如下信息。
在第一次循環(huán)的時(shí)候key + 1的值為01,此后依次為:11,21。
通過(guò)這個(gè)我們可以判斷: 這個(gè)key其實(shí)是一個(gè)String類型的。
所以上面的步驟相當(dāng)于:

sid["01"] = arr[0];
sid["11"] = arr[1];
sid["21"] = arr[2];

究其原因,我只能在淺層面作出解釋:
這可能是因?yàn)?b>for-in一般是用于對(duì)象的(狹義的對(duì)象),而對(duì)象的屬性是一個(gè)String類型,所以for-in的參數(shù)key被定義為一個(gè)String類型。這并沒(méi)有考慮過(guò)數(shù)組的屬性名(下標(biāo))不是String類型,而是一個(gè)Number類型的情況。所以就出現(xiàn)了上面的問(wèn)題。此外在MDN的js語(yǔ)法關(guān)于for-in這塊出現(xiàn)過(guò)這樣的提示:

Note: for..in 不應(yīng)該被用來(lái)迭代一個(gè)下標(biāo)順序很重要的 Array .

可能就包含這種情況吧。

問(wèn)題2:arr[0]的值在sid中沒(méi)有出現(xiàn)

arr[0]的值其實(shí)通過(guò)sid["01"]可以取到。
此外,在node下打印sid的時(shí)候可能與在console中打印出現(xiàn)不同的結(jié)果。

問(wèn)題解決

對(duì)于數(shù)組的遍歷,最好使用:forEach,map,some,filter,find等方法。尤其是是這種牽扯到數(shù)組下標(biāo)的盡量不要使用for-in來(lái)處理,如果非要使用可以做如下處理:

var arr = ["a", "b", "c"];
var sid = ["Go"];
for (var key in arr) {
    sid[parseInt(key) + 1] = arr[key];
}
console.log(sid)

以避免如上的問(wèn)題。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/85155.html

相關(guān)文章

  • javascript 代碼規(guī)范

    目錄 1.為什要遵守代碼規(guī)范 2.編寫代碼需遵守的幾個(gè)原則 3.編碼規(guī)范(Coding Conventions) 4.命名規(guī)范(Naming Conventions) 5.css基礎(chǔ)class類 1.為什要遵守代碼規(guī)范 軟件bug的修復(fù)是昂貴的,并且隨著時(shí)間的推移,這些bug的成本也會(huì)增加,尤其當(dāng)這些bug潛伏并慢慢出現(xiàn)在已經(jīng)發(fā)布的軟件中時(shí)。當(dāng)你發(fā)現(xiàn)bug 的時(shí)候就立即修復(fù)它是最好的,此時(shí)你代...

    cnsworder 評(píng)論0 收藏0
  • 深入理解JavaScript系列1:編寫高質(zhì)量JavaScript代碼基本要點(diǎn)

    摘要:訪問(wèn)全局對(duì)象在瀏覽器中,全局對(duì)象可以通過(guò)屬性在代碼的任何位置訪問(wèn)除非你做了些比較出格的事情,像是聲明了一個(gè)名為的局部變量。 前言 才華橫溢的Stoyan Stefanov,在他寫的由O’Reilly初版的新書《JavaScript Patterns》(JavaScript模式)中,我想要是為我們的讀者貢獻(xiàn)其摘要,那會(huì)是件很美妙的事情。具體一點(diǎn)就是編寫高質(zhì)量JavaScript的一些要素...

    Enlightenment 評(píng)論0 收藏0
  • js遍歷之for forEach in of

    摘要:語(yǔ)法參數(shù)當(dāng)前遍歷項(xiàng)。遍歷的范圍在第一次調(diào)用前就會(huì)確定。已刪除的項(xiàng)不會(huì)被遍歷到。的是由提出的,目的是作為遍歷所有數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一方法。不僅可以遍歷數(shù)組,還可以遍歷結(jié)構(gòu),某些類似數(shù)組的對(duì)象如對(duì)象對(duì)象,對(duì)象,以及字符串。 即使是最簡(jiǎn)單的循環(huán),其中也深藏學(xué)問(wèn) ECMAScript5(es5)有三種for循環(huán) 簡(jiǎn)單for for in forEach ECMAScript6(es6)新增 fo...

    yeyan1996 評(píng)論0 收藏0
  • Javascript中對(duì)象——原型模式(Prototype)

    摘要:使用原型模式添加方法和屬性在前面的章節(jié)中,已經(jīng)學(xué)習(xí)過(guò)了如何定義一個(gè)構(gòu)建新對(duì)象時(shí)使用的構(gòu)造函數(shù)。向構(gòu)造函數(shù)的中添加方法和屬性是在對(duì)象被創(chuàng)建的時(shí)候?yàn)閷?duì)象添加功能的另一種方式。讓我們繼續(xù)使用對(duì)象作為構(gòu)造函數(shù)的原型屬性。 本文原文來(lái)源:《Object-Oriented JavaScript》By Stoyan Stefanov本文翻譯來(lái)源:赤石俊哉 原創(chuàng)翻譯版權(quán)申明: 如果您是原文的原作者并且...

    岳光 評(píng)論0 收藏0
  • 從 V8 源碼看 JS 數(shù)組排序詭異問(wèn)題

    摘要:前幾天一個(gè)朋友在微信里面問(wèn)我一個(gè)關(guān)于數(shù)組排序的問(wèn)題。對(duì)數(shù)組的進(jìn)行排序,然后把排完序的數(shù)組進(jìn)行處理。翻譯成編程術(shù)語(yǔ)就是排序算法是不穩(wěn)定排序。因此第二個(gè)排序算法會(huì)把移動(dòng)到最后,然后對(duì)剩余的數(shù)據(jù)進(jìn)行排序。 前幾天一個(gè)朋友在微信里面問(wèn)我一個(gè)關(guān)于 JS 數(shù)組排序的問(wèn)題。 原始數(shù)組如下: var data = [ {value: 4}, {value: 2}, {value: un...

    MkkHou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<