五月天青色头像情侣网名,国产亚洲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}) 邏輯解析的評論 (共 條)

分享到微博請遵守國家法律
南通市| 新干县| 运城市| 旬邑县| 鲁甸县| 农安县| 左权县| 北安市| 梁山县| 东至县| 白朗县| 河源市| 霍州市| 霍林郭勒市| 汪清县| 长乐市| 大港区| 洛隆县| 峡江县| 九寨沟县| 延津县| 台前县| 齐河县| 衡阳县| 潜山县| 五家渠市| 长顺县| 南昌县| 河西区| 盐亭县| 新巴尔虎左旗| 华池县| 五莲县| 宜昌市| 古浪县| 子长县| 荔波县| 阿尔山市| 上栗县| 南澳县| 夹江县|