摘要:在第一次循環(huán)的時(shí)候的值為,此后依次為。所以就出現(xiàn)了上面的問題。此外,在下打印的時(shí)候可能與在中打印出現(xiàn)不同的結(jié)果。尤其是是這種牽扯到數(shù)組下標(biāo)的盡量不要使用來處理,如果非要使用可以做如下處理以避免如上的問題。
問題復(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é)果卻是:
[ "Go", , , , , , , , , , , "b", , , , , , , , , , "c" ]問題分析
通過上面的輸入結(jié)果我們可以發(fā)現(xiàn)這么幾個(gè)問題:
sid里面多了很多空項(xiàng),length明顯的增多了
arr[0]的值在sid中沒有出現(xiàn)
問題1:sid里面多了很多空項(xiàng),length明顯的增多了略過痛苦的分析步驟直接來重點(diǎn)內(nèi)容:
通過打印key + 1我們可以找到問題的關(guān)鍵。通過打印我們可以得到如下信息。
在第一次循環(huán)的時(shí)候key + 1的值為01,此后依次為:11,21。
通過這個(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類型。這并沒有考慮過數(shù)組的屬性名(下標(biāo))不是String類型,而是一個(gè)Number類型的情況。所以就出現(xiàn)了上面的問題。此外在MDN的js語法關(guān)于for-in這塊出現(xiàn)過這樣的提示:
Note: for..in 不應(yīng)該被用來迭代一個(gè)下標(biāo)順序很重要的 Array .
可能就包含這種情況吧。
問題2:arr[0]的值在sid中沒有出現(xiàn)arr[0]的值其實(shí)通過sid["01"]可以取到。
此外,在node下打印sid的時(shí)候可能與在console中打印出現(xiàn)不同的結(jié)果。
對(duì)于數(shù)組的遍歷,最好使用:forEach,map,some,filter,find等方法。尤其是是這種牽扯到數(shù)組下標(biāo)的盡量不要使用for-in來處理,如果非要使用可以做如下處理:
var arr = ["a", "b", "c"]; var sid = ["Go"]; for (var key in arr) { sid[parseInt(key) + 1] = arr[key]; } console.log(sid)
以避免如上的問題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/85155.html
目錄 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í)你代...
摘要:訪問全局對(duì)象在瀏覽器中,全局對(duì)象可以通過屬性在代碼的任何位置訪問除非你做了些比較出格的事情,像是聲明了一個(gè)名為的局部變量。 前言 才華橫溢的Stoyan Stefanov,在他寫的由O’Reilly初版的新書《JavaScript Patterns》(JavaScript模式)中,我想要是為我們的讀者貢獻(xiàn)其摘要,那會(huì)是件很美妙的事情。具體一點(diǎn)就是編寫高質(zhì)量JavaScript的一些要素...
摘要:語法參數(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ì)象,以及字符串。 即使是最簡單的循環(huán),其中也深藏學(xué)問 ECMAScript5(es5)有三種for循環(huán) 簡單for for in forEach ECMAScript6(es6)新增 fo...
摘要:使用原型模式添加方法和屬性在前面的章節(jié)中,已經(jīng)學(xué)習(xí)過了如何定義一個(gè)構(gòu)建新對(duì)象時(shí)使用的構(gòu)造函數(shù)。向構(gòu)造函數(shù)的中添加方法和屬性是在對(duì)象被創(chuàng)建的時(shí)候?yàn)閷?duì)象添加功能的另一種方式。讓我們繼續(xù)使用對(duì)象作為構(gòu)造函數(shù)的原型屬性。 本文原文來源:《Object-Oriented JavaScript》By Stoyan Stefanov本文翻譯來源:赤石俊哉 原創(chuàng)翻譯版權(quán)申明: 如果您是原文的原作者并且...
摘要:前幾天一個(gè)朋友在微信里面問我一個(gè)關(guān)于數(shù)組排序的問題。對(duì)數(shù)組的進(jìn)行排序,然后把排完序的數(shù)組進(jìn)行處理。翻譯成編程術(shù)語就是排序算法是不穩(wěn)定排序。因此第二個(gè)排序算法會(huì)把移動(dòng)到最后,然后對(duì)剩余的數(shù)據(jù)進(jìn)行排序。 前幾天一個(gè)朋友在微信里面問我一個(gè)關(guān)于 JS 數(shù)組排序的問題。 原始數(shù)組如下: var data = [ {value: 4}, {value: 2}, {value: un...
閱讀 1454·2021-11-04 16:11
閱讀 3132·2021-10-12 10:11
閱讀 3085·2021-09-29 09:47
閱讀 1678·2021-09-22 15:40
閱讀 1093·2019-08-29 15:43
閱讀 2871·2019-08-29 13:50
閱讀 1650·2019-08-29 13:28
閱讀 2756·2019-08-29 12:54