App下載

Array.apply(),new Array(),arr =[] 三者的區(qū)別

猿友 2020-08-21 11:46:15 瀏覽數(shù) (4023)
反饋

為什么會(huì)寫(xiě)這篇文章呢?看Vue文檔渲染函數(shù)的時(shí)候發(fā)現(xiàn)一個(gè)問(wèn)題很好奇,Array.apply(null, { length: 20 })為什么這樣定義數(shù)組?然后查閱資料做了一個(gè)小結(jié)記錄一下,麻雀雖小,五臟俱全。

Array.apply(),new Array(),arr =[] 的區(qū)別

Array.apply()

apply()在MDN中解釋是這樣的:

func.apply(thisArg, [argsArray])

thisArg 必選的。在 func 函數(shù)運(yùn)行時(shí)使用的 this 值。請(qǐng)注意,this可能不是該方法看到的實(shí)際值:如果這個(gè)函數(shù)處于非嚴(yán)格模式下,則指定為 null 或 undefined 時(shí)會(huì)自動(dòng)替換為指向全局對(duì)象,原始值會(huì)被包裝。

argsArray 可選的。一個(gè)數(shù)組或者類(lèi)數(shù)組對(duì)象,其中的數(shù)組元素將作為單獨(dú)的參數(shù)傳給 func 函數(shù)。如果該參數(shù)的值為 null 或 undefined,則表示不需要傳入任何參數(shù)。從ECMAScript 5 開(kāi)始可以使用類(lèi)數(shù)組對(duì)象

function printArguments() {
    console.log(arguments)
    Array.prototype.forEach.call(arguments, function (item) {
        console.log(item);
    });
}
printArguments(undefined,undefined)

Array.apply(),new Array(),arr =[] 的區(qū)別

由此可見(jiàn){length:20}是個(gè)類(lèi)數(shù)組argument只提供了length的屬性相當(dāng)于創(chuàng)建了一個(gè)長(zhǎng)度為20,每個(gè)元素為undefined的數(shù)組

(20) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

Array.apply(),new Array(),arr =[] 的區(qū)別

new Array()

new Array(20)Array(20)只是創(chuàng)建了一個(gè)長(zhǎng)度為20,元素是空的數(shù)組

(20) [empty × 20]

arr = []

let arr=[];
arr.length= 20
(20) [empty × 20]

由此可見(jiàn)new Array(20)let arr=[];arr.length= 20等價(jià)

Array.from()

Array.from() 方法從一個(gè)類(lèi)似數(shù)組或可迭代對(duì)象創(chuàng)建一個(gè)新的,淺拷貝的數(shù)組實(shí)例。

Array.from({length:20})
(20) [undefined, undefined, undefined, undefined, undefined, undefined, undefi

文章來(lái)源:公眾號(hào)--小丑的小屋 作者:小丑

以上就是W3Cschool編程獅關(guān)于Array.apply(),new Array(),arr =[] 三者的區(qū)別的相關(guān)介紹了,希望對(duì)大家有所幫助。

0 人點(diǎn)贊