摘要:實(shí)際參數(shù)在函數(shù)中我們可以使用對(duì)象獲得注形參可通過獲得,雖然對(duì)象與數(shù)組形似,但仍不是真正意義上的數(shù)組。我們可以通過數(shù)組的方法將對(duì)象轉(zhuǎn)換成真正的數(shù)組。方法在其原型對(duì)象中,而就是的原型對(duì)象,在控制臺(tái)中輸入,結(jié)果是所以第一段代碼可以順利執(zhí)行。
實(shí)際參數(shù)在函數(shù)中我們可以使用 arguments 對(duì)象獲得 (注:形參可通過 arguments.callee 獲得),雖然 arguments 對(duì)象與數(shù)組形似,但仍不是真正意義上的數(shù)組。
我們可以通過數(shù)組的 slice 方法將 arguments 對(duì)象轉(zhuǎn)換成真正的數(shù)組。
方法一:通過Array.prototype屬性調(diào)用slice方法var args = Array.prototype.slice.call(arguments);
Array 本身是沒有 slice 方法,它的方法在 Array.prototype中,而我們?cè)谡{(diào)用 slice 方法的時(shí)候,如果在 Array 本身沒有找到 slice 方法的話,會(huì)通過它的原型鏈往上查找。
方法二:通過調(diào)用[]的slice方法var args = [].slice.call(arguments, 0);方法三:通過遍歷arguments,返回?cái)?shù)組
function toArray(){ var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return args; }
注:一般的函數(shù)的 arguments.length 都在 10 以內(nèi),方法二有優(yōu)勢(shì);
方法二的代碼量上也比第一種少,至少可以減小一點(diǎn)字節(jié)
實(shí)例:
function revse(){ try{ return Array.prototype.slice.call(arguments); } catch(e){ var newarr=[]; for(var i=arguments.length-1;i>=0;i--){ //newarr.push(arguments[i]); newarr[i] = arguments[i]; //這樣比push快? } return newarr; } } var s = revse("a","b","c"); console.log(s); //["a", "b", "c"]
跟arguments問題相關(guān)題目
在某些場(chǎng)景下,需要將函數(shù)的 arguments 參數(shù)作為一個(gè)數(shù)組調(diào)用,但是 arguments 是一個(gè)奇異對(duì)象,所以試著將 arguments 轉(zhuǎn)化為一個(gè)數(shù)組,例如下面例子:
function argToArr(){ return [].slice.call(arguments, 0); } console.log(argToArr(1,2,3)); //[1,2,3] function argToArr(){ return Array.slice.call(arguments, 0); } console.log(argToArr(1,2,3)); //Uncaught TypeError: Cannot read property "call" of undefined
這是為什么呢?
第二段代碼報(bào)錯(cuò)是因?yàn)锳rray是構(gòu)造函數(shù),不是對(duì)象,打開控制臺(tái),輸入 typeof Array,結(jié)果是 function。
slice()方法在其原型對(duì)象中,而[]就是Array的原型對(duì)象,在控制臺(tái)中輸入 Array.prototype,結(jié)果是[],所以第一段代碼可以順利執(zhí)行。
第二段代碼如下修改就可以了:
function argToArr(){ return Array.prototype.slice.call(arguments, 0); // 改這一行 } console.log(argToArr(1,2,3));
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87472.html
摘要:最后,我們反過來看,其實(shí)反柯里化相當(dāng)于把原來的形式,轉(zhuǎn)換成了,使得的使用范圍泛化了。更抽象地表達(dá),反柯里化,使得原來調(diào)用,可以轉(zhuǎn)成形式的調(diào)用。 反柯里化 相反,反柯里化的作用在與擴(kuò)大函數(shù)的適用性,使本來作為特定對(duì)象所擁有的功能的函數(shù)可以被任意對(duì)象所用.即把如下給定的函數(shù)簽名, obj.func(arg1, arg2) 轉(zhuǎn)化成一個(gè)函數(shù)形式,簽名如下: func(obj, arg1, ar...
摘要:之前文章詳細(xì)介紹了的使用,不了解的查看進(jìn)階期。不同的引擎有不同的限制,核心限制在,有些引擎會(huì)拋出異常,有些不拋出異常但丟失多余參數(shù)。存儲(chǔ)的對(duì)象能動(dòng)態(tài)增多和減少,并且可以存儲(chǔ)任何值。這邊采用方法來實(shí)現(xiàn),拼成一個(gè)函數(shù)。 之前文章詳細(xì)介紹了 this 的使用,不了解的查看【進(jìn)階3-1期】。 call() 和 apply() call() 方法調(diào)用一個(gè)函數(shù), 其具有一個(gè)指定的 this 值和分...
摘要:而對(duì)于一個(gè)普通的對(duì)象來說,如果它的所有名均為正整數(shù),同時(shí)也有相應(yīng)的屬性,那么雖然該對(duì)象并不是由構(gòu)造函數(shù)所創(chuàng)建的,它依然呈現(xiàn)出數(shù)組的行為,在這種情況下,這些對(duì)象被稱為類數(shù)組對(duì)象。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! JS數(shù)組slice方法是JS語言中最強(qiáng)大、最常用的內(nèi)建函數(shù)之一。 隨著React和其他面向功能的J...
摘要:示例輸出第一步先不考慮插件,在已有的中是沒有這個(gè)公共方法的,如果要簡(jiǎn)單實(shí)現(xiàn)的話可以通過鉤子函數(shù)來,即在里面驗(yàn)證邏輯。按照插件的開發(fā)流程,應(yīng)該有一個(gè)公開方法,在里面使用全局的方法添加一些組件選項(xiàng),方法包含一個(gè)鉤子函數(shù),在鉤子函數(shù)中驗(yàn)證。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo))showImg(https://segmen...
摘要:一前言之前寫了一篇文章系列一些奇淫技巧的實(shí)現(xiàn)方法一簡(jiǎn)短的函數(shù),獲取時(shí)間戳介紹了函數(shù)和獲取時(shí)間戳的方法。,和對(duì)象的構(gòu)造函數(shù)是對(duì)象的屬性。缺點(diǎn)低版本,無法處理集合的轉(zhuǎn)數(shù)組。 一、前言 之前寫了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的實(shí)現(xiàn)方法(一)簡(jiǎn)短的sleep函數(shù),獲取時(shí)間戳 https://www.mwcxs.top/page/74... 介紹了sle...
閱讀 3849·2021-09-27 13:56
閱讀 888·2021-09-08 09:36
閱讀 775·2019-08-30 15:54
閱讀 618·2019-08-29 17:29
閱讀 938·2019-08-29 17:21
閱讀 1693·2019-08-29 16:59
閱讀 2771·2019-08-29 13:03
閱讀 2973·2019-08-29 12:47