最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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}) 邏輯解析的評論 (共 條)

分享到微博請遵守國家法律
华容县| 安塞县| 乐安县| 博罗县| 龙游县| 汕尾市| 泌阳县| 卢氏县| 大丰市| 长治县| 定西市| 揭东县| 长岭县| 深水埗区| 西充县| 商河县| 北安市| 连山| 丹寨县| 炎陵县| 镶黄旗| 汉源县| 东海县| 屯门区| 廊坊市| 揭东县| 九寨沟县| 沾化县| 呼图壁县| 怀宁县| 呈贡县| 潜山县| 浮梁县| 桑日县| 土默特右旗| 永嘉县| 双牌县| 白水县| 沿河| 上栗县| 黑河市|