国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Array.prototype.slice.apply可以轉(zhuǎn)換數(shù)組的原理

jsummer / 3701人閱讀

摘要:同樣的,我們可以先輸出下函數(shù)內(nèi)部的。可以看到,確實(shí)不是一個(gè)純數(shù)組。從該索引處結(jié)束提取原數(shù)組元素從開始。如果該參數(shù)為負(fù)數(shù)則表示在數(shù)組中的倒數(shù)第幾個(gè)元素結(jié)束抽取。在別的數(shù)組里修改這些字符串或數(shù)字或是布爾值,將不會影響另一個(gè)數(shù)組。

我們經(jīng)常可以看到這種寫法。

function test(){  
 //將參數(shù)轉(zhuǎn)為一個(gè)數(shù)組  
 var args = Array.prototype.slice.apply(arguments);
  console.log(args)
} 

一般我們網(wǎng)上看到解釋都是,對于js中的arguments來說,并不是一個(gè)真正的數(shù)組,可以叫它偽數(shù)組,通過Array.prototype.slice.apply方法,可以將其轉(zhuǎn)化成數(shù)組,那讓我們調(diào)用這個(gè)函數(shù),看下函數(shù)中的參數(shù)數(shù)組。

test(11,22);  //[11,12]

同樣的,我們可以先輸出下函數(shù)內(nèi)部的arguments。

console.log(arguments);     //[11,12,callee:,length:2]

可以看到,arguments確實(shí)不是一個(gè)純數(shù)組。那么slice方法在將處理arguments并返回一個(gè)參數(shù)數(shù)組這個(gè)過程中,具體做了什么呢。讓我們先了解下slice這個(gè)方法。
slice()方法返回一個(gè)從開始到結(jié)束(不包括結(jié)束)選擇的數(shù)組的一部分淺拷貝到一個(gè)新數(shù)組對象,且原始數(shù)組不會被修改。
語法

array.slice(begin,end);

參數(shù)
begin 可選,從該索引出開始提取原數(shù)組中的元素(從0開始)。如果該參數(shù)為負(fù)數(shù),則表示從原數(shù)組中的倒數(shù)第幾個(gè)元素開始提取,slice(-2)表示提取原數(shù)組中的倒數(shù)第二個(gè)元素到最后一個(gè)元素(包含最后一個(gè)元素)。如果省略begin,則slice從索引0開始。
end 可選。從該索引處結(jié)束提取原數(shù)組元素(從0開始)。slice會提取原數(shù)組中索引從begin到end的所有元素(包含begin,但不包含end)。
slice(1,4)提取原數(shù)組中的第二個(gè)元素開始直到第四個(gè)元素的所有元素(索引為1,2,3的元素)。
如果該參數(shù)為負(fù)數(shù),則表示在數(shù)組中的倒數(shù)第幾個(gè)元素結(jié)束抽取。slice(-2,-1)表示抽取了原數(shù)組中的倒數(shù)第二個(gè)元素到最后一個(gè)元素(不包含最后一個(gè)元素,也就是只有倒數(shù)第二個(gè)元素)
另外:如果end被省略,則slice會一直提取到數(shù)組末尾。
如果end大于數(shù)組長度,slice也會一直提取到原數(shù)組末尾。
返回值
一個(gè)含有提取元素的新數(shù)組。
關(guān)于基本的slice的使用,我相信很容易理解也很容易使用。但是slice有兩個(gè)特殊的地方.slice不修改原數(shù)組,只會返回一個(gè)淺復(fù)制了原數(shù)組中的元素的一個(gè)新數(shù)組。原數(shù)組的元素會按照下述規(guī)則拷貝:
1、如果該元素是個(gè)對象引用(不是實(shí)際的對象),slice會拷貝這個(gè)對象引用到新的數(shù)組里。兩個(gè)對象引用都引用了同一個(gè)對象。如果被引用的對象發(fā)生改變,則新的和原來的數(shù)組中這個(gè)元素也會發(fā)生改變。這個(gè)很好理解,看一個(gè)例子就明白。

var aa_aa = {x:1};
var aa_arr = [1,2,aa_aa];
aa_aa.x = 2;
console.log(aa_arr.slice(-1)); //[{x:2}]

2、對于字符串、數(shù)字及布爾值來說(不是String、Number或者Boolean對象),slice會拷貝這些值到新的數(shù)組里。在別的數(shù)組里修改這些字符串或數(shù)字或是布爾值,將不會影響另一個(gè)數(shù)組。這個(gè)也很容易理解,可參考我之前的文章,對引用類型和基本類型的介紹。
如果向兩個(gè)數(shù)組任一個(gè)添加了新元素,則另一個(gè)不會受到影響。
以上內(nèi)容來自MDN關(guān)于slice方法的介紹。
那現(xiàn)在我們知道,slice方法擁有將原數(shù)組中的元素淺復(fù)制到新數(shù)組中,并返回一個(gè)新數(shù)組的能力。那對于這里的函數(shù)。首先,利用apply方法讓當(dāng)前的函數(shù)內(nèi)的arguments可以使用slice方法,然后slice方法將arguments中的11和12兩個(gè)元素淺復(fù)制到新數(shù)組,并返回,這就實(shí)現(xiàn)了從arguments到數(shù)組的轉(zhuǎn)變

function test(){  
 //將參數(shù)轉(zhuǎn)為一個(gè)數(shù)組  
 var args = Array.prototype.slice.apply(arguments);
  console.log(args)
} 
test(11,12);

參考鏈接:
https://developer.mozilla.org...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97577.html

相關(guān)文章

  • bind()、call()、apply()理解及用法

    摘要:首先,我們判斷是否存在方法,然后,若不存在,向?qū)ο蟮脑椭刑砑幼远x的方法。指向調(diào)用它的對象。總之三個(gè)的使用區(qū)別都是用來改變函數(shù)的對象的指向的第一個(gè)參數(shù)都是要指向的對象都可以利用后續(xù)參數(shù)傳參是返回對應(yīng)函數(shù),便于稍后調(diào)用,是立即調(diào)用 apply和call都是為了改變某個(gè)函數(shù)運(yùn)行時(shí)的上下文而存在的(就是為了改變函數(shù)內(nèi)部this的指向),F(xiàn)unction對象的方法,每個(gè)函數(shù)都能調(diào)用; 使用a...

    hoohack 評論0 收藏0
  • 關(guān)于JavaScript函數(shù)柯里化問題探索

    摘要:函數(shù)柯里化關(guān)于函數(shù)柯里化的問題最初是在忍者秘籍中講閉包的部分中看到的,相信很多同學(xué)見過這樣一道和柯里化有關(guān)的面試題實(shí)現(xiàn)一個(gè)函數(shù),使得如下斷言能夠能夠通過簡單說就是實(shí)現(xiàn)一個(gè)求值函數(shù),能夠?qū)⑺袇?shù)相加得出結(jié)果。方法返回一個(gè)表示該對象的字符串。 函數(shù)柯里化 ??關(guān)于函數(shù)柯里化的問題最初是在《JavaScript忍者秘籍》中講閉包的部分中看到的,相信很多同學(xué)見過這樣一道和柯里化有關(guān)的面試題:...

    vboy1010 評論0 收藏0
  • 常用數(shù)組操作方法

    摘要:是對象內(nèi)置的方法參數(shù)是字符串是的數(shù)組參數(shù)有函數(shù)和默認(rèn)初始值函數(shù)有四個(gè)參數(shù)上一次的返回值當(dāng)前值當(dāng)前值索引當(dāng)前數(shù)組求和替換方案求和,利用截取改變數(shù)組再利用遞歸求和合并方法用于合并兩個(gè)或多個(gè)數(shù)組。 來源于:阿賢博客 在日常的開發(fā)中離不開前端對數(shù)據(jù)的處理,在這里整理下ES6/ES7/ES8...新的數(shù)組api。 扁平化n維數(shù)組 Array.flat() -- ES10 方法會按照一個(gè)可指定的...

    vvpale 評論0 收藏0
  • 面對對象(五)this使用注意點(diǎn)

    摘要:綁定回調(diào)函數(shù)的對象前面的按鈕點(diǎn)擊事件的例子,可以改寫如下。方法有一些使用注意點(diǎn)。上面代碼中,方法會調(diào)用回調(diào)函數(shù)。但是,方法的回調(diào)函數(shù)內(nèi)部的卻是指向全局對象,導(dǎo)致沒有辦法取到值。 4.1避免多層 this由于this的指向是不確定的,所以切勿在函數(shù)中包含多層的this。 var o = { f1: function () { console.log(this); var f2 = fu...

    hearaway 評論0 收藏0
  • 《JavaScript語言精粹 修訂版》 讀書筆記

    摘要:于是我就先把這本薄的經(jīng)典書語言精粹修訂版豆瓣讀書本書簡介總共章,除去附錄,才頁,讀完并記錄了一些筆記。讀書筆記還可以分享給別人看。編程語言第版定義了的標(biāo)準(zhǔn)。程序檢查時(shí)丟棄值為函數(shù)的屬性。 之前看到這篇文章,前端網(wǎng)老姚淺談:怎么學(xué)JavaScript?,說到怎么學(xué)習(xí)JavaScript,那就是看書、分析源碼。10本書讀2遍的好處,應(yīng)該大于一本書讀20遍。看書主動學(xué)習(xí),看視頻是被動學(xué)習(xí)。看...

    EscapedDog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<