摘要:查看文檔可以看到的構(gòu)造函數(shù)語法,可以得知支持兩種構(gòu)造方式。方法會把生成的稀疏數(shù)組展開并當做參數(shù)再次傳給的構(gòu)造函數(shù),就是這樣子這樣最終就會得到一個數(shù)組,這樣就不是稀疏數(shù)組了,里面是有值的,雖然是。
今天看到一段代碼:
Array.apply(null, Array(30)).map(() => 4)
這代碼的寫法無法讓人一下理解它的意圖。
Google 之后知道它的作用是構(gòu)造一個長度為 30 的數(shù)組,默認值是 4。
但是為什么要寫得這么別扭呢?我們來分解下它每一步在做什么:
Array.apply(null, Array(30))
這一段代碼生成一個長度為30的數(shù)組,里面的值都是 undefined。
之后的 .map(() => 4) :負責填充默認值
但是為什么構(gòu)造一個空值數(shù)組需要這么麻煩呢?還要用上 apply 方法,嘗試用 Array(30).map(() => 4) 來生成數(shù)組的話,你會得到這樣的一個結(jié)果,根本就沒有值。
[ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]
查看文檔 可以看到 Array 的構(gòu)造函數(shù)語法,可以得知 Array 支持兩種構(gòu)造方式。使用參數(shù)形式給定 N 個數(shù)組元素,或者給定一個數(shù)組長度。
不過比較重要的一點文檔里沒提到,使用 new Array(arrayLength) 方式構(gòu)造的數(shù)組是一個稀疏數(shù)組,里面是沒有任何值的,只有長度。所以這個方式構(gòu)造出來的數(shù)組是無法遍歷的,也就無法用 map 遍歷填充值了。
知道了上述的原因,我們就能理解:
Array.apply(null, Array(30))
其實等于
Array.apply(null, [, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,]))
然后我們要繼續(xù)了解 apply 方法,在這里可以看 apply 的作用 文檔解釋, 這里不作介紹。apply 方法會把生成的稀疏數(shù)組展開并當做參數(shù)再次傳給 Array 的構(gòu)造函數(shù),就是這樣子:
Array(null,null,null......))
這樣最終就會得到一個數(shù)組,這樣就不是稀疏數(shù)組了,里面是有值的,雖然是 undefined。
結(jié)語[ undefined, undefined, undefined ......]
總結(jié)下,其實就是 js 的 Array 的默認構(gòu)造函數(shù)生成的是稀疏數(shù)組,是無法用 map 遍歷填充的。所以才寫得這么繞。
不過,說了這么多,要實現(xiàn)原本的需求,其實有更簡單的方法啦:
Array(30).fill(4)
fill 方法的說明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91181.html
摘要:下面這條語句將導(dǎo)致語法錯誤變量名允許包含字母數(shù)字美元符號和下劃線但第一個字符不允許是數(shù)字??梢园岩恍┎紶栔荡嫒胍粋€數(shù)組,還可以把一組數(shù)值存入一個數(shù)組甚至可以把這種數(shù)據(jù)類型混在一起存入一個數(shù)組數(shù)組元素還可以是變量這將把數(shù)組的第一個元素賦值為。 執(zhí)行Javascript的方式 第一種方式是將JS代碼放到 < head > 標簽中的 < script > 標簽之間: ...
摘要:下面這條語句將導(dǎo)致語法錯誤變量名允許包含字母數(shù)字美元符號和下劃線但第一個字符不允許是數(shù)字。可以把一些布爾值存入一個數(shù)組,還可以把一組數(shù)值存入一個數(shù)組甚至可以把這種數(shù)據(jù)類型混在一起存入一個數(shù)組數(shù)組元素還可以是變量這將把數(shù)組的第一個元素賦值為。 執(zhí)行Javascript的方式 第一種方式是將JS代碼放到 < head > 標簽中的 < script > 標簽之間: ...
摘要:下面這條語句將導(dǎo)致語法錯誤變量名允許包含字母數(shù)字美元符號和下劃線但第一個字符不允許是數(shù)字??梢园岩恍┎紶栔荡嫒胍粋€數(shù)組,還可以把一組數(shù)值存入一個數(shù)組甚至可以把這種數(shù)據(jù)類型混在一起存入一個數(shù)組數(shù)組元素還可以是變量這將把數(shù)組的第一個元素賦值為。 執(zhí)行Javascript的方式 第一種方式是將JS代碼放到 < head > 標簽中的 < script > 標簽之間: ...
摘要:它是按以下方式工作的。對已填充的二進制進行編碼時,任何完全填充不包括原始數(shù)組中的位的位組都有特殊的第個符號表示。剩下的兩個位組都是填充碼,用來表示。最新的瀏覽器提供了自動生成的方法和希望此文可以幫助你完全理解。 HTTP將BASE64-編碼用于基本認證和摘要認證,在幾種HTTP擴展中也使用了該編碼。 Base-64編碼保證了二進制數(shù)據(jù)的安全 Base-64編碼可以將任意一組字節(jié)轉(zhuǎn)換為較...
摘要:一共講解了個常用的新特性,講解過程也是由淺入深。最后一個新增的方法主要是為了彌補當做構(gòu)造函數(shù)使用時產(chǎn)生的怪異結(jié)果。特性共享父級對象共享父級不能當做構(gòu)造函數(shù)語法最簡表達式前后對比很容易理解,可以明顯看出箭頭函數(shù)極大地減少了代碼量。 showImg(https://segmentfault.com/img/bVQ5GW?w=1024&h=675); 上周在公司組織了 ES6 新特性的分享會...
閱讀 1401·2019-08-30 12:54
閱讀 1883·2019-08-30 11:16
閱讀 1628·2019-08-30 10:50
閱讀 2462·2019-08-29 16:17
閱讀 1282·2019-08-26 12:17
閱讀 1391·2019-08-26 10:15
閱讀 2399·2019-08-23 18:38
閱讀 797·2019-08-23 17:50