五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Array.apply(null, {length: 99}) 邏輯解析

2023-02-23 16:00 作者:MagnumHou  | 我要投稿


一、基礎概述

vue 教程中有一段 demo code,如下:

這個表達式Array.apply(null, { length: 20 })有點讓人費解。第一感覺這個表達式就是為了創(chuàng)建一個長度為20的數(shù)組,但表達式Array(20)也可以實現(xiàn)這個功能啊,為啥非要寫那么復雜呢?

于是乎就想,如果是這樣子,那么我把這一段代碼換成 Array(20) ,變成下面這樣:

JS 代碼實現(xiàn)

控制臺打印

那么按照剛剛的理解,把代碼換成這個樣子應該是沒有問題的。然而打印結果告訴我們剛剛那樣子地理解應該是不對的, Array.apply(null, { length: 99 })和Array(99) 這兩句代碼還是有區(qū)別的,那么區(qū)別是什么?


二、解析

2.1 apply 函數(shù)方式

ES5開始 apply 函數(shù)的第二個參數(shù)除了可以是數(shù)組外,還可以是類數(shù)組對象(即包含length屬性,且length屬性值是個數(shù)字的對象)。對象{length: 2}就是一個類數(shù)組對象,因為沒有初始化下標0,1的值,所以獲取0,1下標的值得到的都是undefined。

這樣表達式 Array.apply(null, { length: 2}) 就等價于如下代碼:


這樣就很容易知道該表達式的值是一個長度為2,且每個元素值都被初賦值為 undefined 的數(shù)組(注意此時不是數(shù)組元素沒有初始化,而是初始化成undefined,這就是跟 Array(2) 的區(qū)別)

為啥非要寫那么復雜呢?

即map函數(shù)并不會遍歷數(shù)組中沒有初始化或者被 delete 的元素(有相同限制還有 forEach, reduce 方法)。所以寫這么“復雜”就是為了實現(xiàn):創(chuàng)建一個長度為 99,且每個元素都被初始化的數(shù)組。這樣 map 方法就可以循環(huán) 99 次了。

可以修改成

ES6方式

2.2 構造函數(shù) + 一個數(shù)字參數(shù)

直接調用Array函數(shù)跟new方式調用是等價的,即

表示創(chuàng)建一個長度為 99 的數(shù)組,注意該數(shù)組的元素并沒有被初始化([empty ×99]),即


Array.apply(null, {length: 99}) 邏輯解析的評論 (共 條)

分享到微博請遵守國家法律
隆化县| 建湖县| 辽中县| 寿宁县| 麦盖提县| 峨山| 铁岭市| 黔东| 莱芜市| 连江县| 湛江市| 青田县| 镇平县| 繁峙县| 贞丰县| 荣成市| 鹿泉市| 云龙县| 利津县| 柘荣县| 泰宁县| 扶余县| 阿坝县| 河津市| 衡阳市| 花莲县| 星子县| 鄂伦春自治旗| 克什克腾旗| 琼海市| 镇沅| 上犹县| 宣武区| 祁门县| 房山区| 无极县| 荃湾区| 孙吴县| 巴青县| 南涧| 察雅县|