摘要:淺復(fù)制是說只拷貝數(shù)組元素的內(nèi)容,而不管該內(nèi)容是不是指向另一個值。深復(fù)制與淺復(fù)制對應(yīng),它會不僅拷貝數(shù)組元素的內(nèi)容,還會分析其內(nèi)容是否為一個指針類型的值,如對象,函數(shù),數(shù)組等。
1. Array.from( likeArrObj, [valueHandleFn], [thisObj] )
Array.from()用于將以下兩類對象轉(zhuǎn)化為真正的數(shù)組:
類似數(shù)組的對象(array-like object,即本身 具有l(wèi)ength屬性的對象 )
可遍歷對象( 原型鏈上具有[Symbol.iterator]方法的對象 ,即具有iterator接口的iterable對象)
它接受三個參數(shù):
likeArrObj: 需要被轉(zhuǎn)化的對象
[valueHandleFn]: 用于處理該對象中每個值的一個 遍歷函數(shù) ,類似于map(),該參數(shù)可選。
[thisObj]: 用于 綁定[valueHandleFn]中的this ,也就是只有使用了[valueHandleFn],它才會有作用
它返回的是將該對象轉(zhuǎn)化成功后,得到的數(shù)組。
1.1 代碼示例let likeArrObj = { "0": 0, "1": 1, "2": 2, length: 3, } // ES5 的寫法 (兩種) var arr_es5_01 = Array.prototype.slice.call( likeArrObj ) var arr_es5_02 = [].prototypr.slice.call( likeArrObj ) // ES6 的寫法 (兩種) let arr_es6_01 = Array.from( likeArrObj ) let arr_es6_02 = [...likeArrObj]1.1.1 對代碼的說明:
Array.prototype.slice( startNum, endNum ) 可以淺復(fù)制一部分array元素,起始于startNum,終止于(endNum - 1)。
淺復(fù)制 是說只拷貝數(shù)組元素的內(nèi)容,而不管該內(nèi)容是不是指向另一個值。
通俗點講,就是只拷貝一層數(shù)據(jù)。
深復(fù)制 與淺復(fù)制對應(yīng),它會不僅拷貝數(shù)組元素的內(nèi)容,還會分析其內(nèi)容是否為一個“ 指針 ”類型的值,如對象,函數(shù),數(shù)組等。如果是一個“ 指針 ”類型的值,則會繼續(xù)將其值下的所有內(nèi)容統(tǒng)統(tǒng)復(fù)制一份.
內(nèi)容中的內(nèi)容全要復(fù)制,直到其內(nèi)容為 undefined 、 null 、 Boolean 、 Number 、 String 、 Symbol 的一種。
Function.prototype.call( thisObj, arg1, arg2, ..., argn ) 用于在運行時指定該函數(shù)的this綁定對象
thisObj 是需要綁定的對象
arg1, arg2, ..., argn 是該函數(shù)調(diào)用的參數(shù)
Function.prototype.apply( thisObj, argArr ) 與該方法功能一致,只是在參數(shù)傳遞上,使用的是一個數(shù)組形式
[...likeArrObj]中的 ... 是擴展運算符,它通過調(diào)用likeArrObj的 [Symbol.iterator]方法 來將其打散成一個個獨立的量,最后再用 [] 來將其合成一個新的數(shù)組,所以使用該寫法時,一定需要確保likeArrObj具有 [Symbol.iterator]方法。
1.2 應(yīng)用場景它的常見應(yīng)用場景:
將 document.querySelectorAll( str ) 返回的NodeList集合轉(zhuǎn)化為真正的數(shù)組
將 arguments 對象轉(zhuǎn)化為真正的數(shù)組
轉(zhuǎn)化為真正的數(shù)組之后,就可以使用 Array.prototype.forEach() 方法來操作該對象了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91958.html
摘要:中對字符串函數(shù)對象數(shù)組等都進行了擴展,感覺目的呢就是完善一下所為外行人詬病的一些偽其實個人覺得不完美的才是真的美,什么東西都無懈可擊了就顯得不夠有趣了。 ES6中對字符串、函數(shù)、對象、數(shù)組等都進行了擴展,感覺目的呢就是完善一下JS所為外行人詬病的一些偽bug.其實個人覺得不完美的JS才是真的美,什么東西都無懈可擊了就顯得不夠有趣了。好了,接下來又要開始拾人牙慧了... 主要講解: ...
摘要:擴展運算符簡介擴展運算符是三個點,可以將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。在實際項目中靈活應(yīng)用擴展運算符運算符,能寫出更精簡易讀性高的代碼。 1、擴展運算符簡介 擴展運算符( spread )是三個點(...),可以將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。 說的通俗易懂點,有點像化骨綿掌,把一個大元素給打散成一個個單獨的小元素。 showImg(https://segmentfault.c...
摘要:函數(shù)運行后,返回一個遍歷器對象,因此也可以使用擴展運算符。總是返回參數(shù)值組成的數(shù)組。方法的回調(diào)函數(shù)可以接受三個參數(shù),依次為當(dāng)前的值當(dāng)前的位置和原數(shù)組。上面代碼中,的參數(shù)為,表示要拉平兩層的嵌套數(shù)組。 1.擴展運算符 含義擴展運算符(spread)是三個點(...)。它好比 rest 參數(shù)的逆運算,將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。console.log(...[1, 2, 3])//...
摘要:它的參數(shù)是一個回調(diào)函數(shù),所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個返回值為的成員,然后返回該成員。上面代碼中,方法的回調(diào)函數(shù)可以接受三個參數(shù),依次為當(dāng)前的值當(dāng)前的位置和原數(shù)組。 數(shù)組的擴展 展開運算符 展開運算符(用三個連續(xù)的點 ( ... ) 表示)是 ES6 中的新概念,使你能夠?qū)⒆置媪繉ο笳归_為多個元素。 合并數(shù)組 展開運算符的一個用途是結(jié)合數(shù)組。 如果你需要結(jié)合多個數(shù)組,在...
摘要:最近在做的項目需要將升級到,使用過擴展的同學(xué)應(yīng)該知道,的擴展是完全不兼容的擴展的,改如何使用呢。 最近在做的項目需要將PHP5.6升級到PHP7.0,使用過PHP-mongo擴展的同學(xué)應(yīng)該知道,PHP7.0的mongodb擴展是完全不兼容PHP5.6的mongo擴展的,php-mongodb改如何使用呢。 下面直接說明各種方法的使用: 1.mongodb連接: private func...
閱讀 1438·2021-11-19 11:38
閱讀 3573·2021-11-15 11:37
閱讀 816·2021-09-30 09:48
閱讀 967·2021-09-29 09:46
閱讀 906·2021-09-23 11:22
閱讀 1884·2019-08-30 15:44
閱讀 3403·2019-08-26 13:58
閱讀 2392·2019-08-26 13:26