日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript学习系列3 -- JavaScript arguments对象学习

發(fā)布時(shí)間:2023/12/10 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript学习系列3 -- JavaScript arguments对象学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在實(shí)際項(xiàng)目開發(fā)中,目前還是很少使用到JavaScript 中的arguments對(duì)象,那么它到底是干什么用的呢

arguments是JavaScript中的一個(gè)類數(shù)組對(duì)象,它代表傳給一個(gè)正在執(zhí)行的函數(shù)function的參數(shù)列表。??

看完這個(gè)定義,需要明白,它是一個(gè)對(duì)象,不是一個(gè)數(shù)組,但是它這個(gè)對(duì)象卻又類似數(shù)組,也就是說樣子和數(shù)組類似. 那它的內(nèi)容,它里面的內(nèi)容是傳遞給正在執(zhí)行的函數(shù)Function的參數(shù)列表

上面都特別強(qiáng)調(diào),是 正在執(zhí)行的函數(shù)function,這也就是說,arguments對(duì)象只有函數(shù)已經(jīng)開始執(zhí)行時(shí),才可以使用,才能取到值。 所以, arguments對(duì)象存儲(chǔ)的是實(shí)際傳遞給函數(shù)的參數(shù),而不是函數(shù)聲明時(shí)所定義的參數(shù)列表

我們來看一個(gè)例子,能夠更直觀的理解它

function showArgs() {console.log(arguments); }showArgs("a","1",{ test: "only for test" });執(zhí)行結(jié)果如下["a","1",Object]

上面的函數(shù)showArgs作用是輸出它的參數(shù)列表,當(dāng)我們調(diào)用它?showArgs("a","1",{ test: "only for test" }) 時(shí),可以看到,它總共包括3個(gè)參數(shù),分別是”a“,"1",{ test: "only for test"?}, 其中,第三個(gè){ test: "only for test"?}是個(gè)object, javascript無法直接輸出它,所以就輸出了object

如果要訪問其中某一個(gè)參數(shù)呢,arguments提供和數(shù)組一樣的方式來訪問單個(gè)參數(shù),也就是使用下標(biāo)arguments[0],arguments[1]來訪問.?

形式應(yīng)該是這樣的 [function].arguments[n]? function在這里可以省略,表示的是當(dāng)前正在執(zhí)行的Function對(duì)象的名字

在上面的函數(shù)中, arguments[0] = "a", arguments[1] = "1" , arguments[2] = {test: "only for test"}

接下來,我們來看看arguments對(duì)象的一些屬性

1. length屬性

上面說了arguments是個(gè)類數(shù)組對(duì)象,它和數(shù)組一樣,也有一個(gè)length屬性,我們可以通過arguments.length來獲得傳入函數(shù)的參數(shù)個(gè)數(shù)

2. callee屬性

?arguments.callee的值,是當(dāng)前正在被執(zhí)行的函數(shù),也就是說是當(dāng)前這個(gè)arguments它所在的函數(shù).? 我們上面論述了,arguments在函數(shù)被調(diào)用時(shí)才會(huì)有效,它才存在。 因此,在函數(shù)沒有被調(diào)用時(shí) arguments.callee是不存在的.

另外 特別注意? 在JavaScript的嚴(yán)格模式下面, arguments.callee是不可以使用的

3. arguments轉(zhuǎn)成真正的數(shù)組

我們上面說了,arguments是一個(gè)類數(shù)組的對(duì)象,但不是數(shù)組,它雖然也有和數(shù)組一樣的length屬性,也可以像數(shù)組一樣采用arguments[n]下標(biāo)形式進(jìn)行訪問。 但它并不是數(shù)組,那么我們可以把它轉(zhuǎn)換為數(shù)組嗎 ? 答案是可以的

采用如下方法? ? Array.prototype.slice.call(arguments);? 還可以用一個(gè)簡(jiǎn)易的寫法 [].slice.call(arguments);??

事實(shí)上, slice方法可以用來把滿足一定條件的對(duì)象轉(zhuǎn)換成數(shù)組, 這個(gè)在這里我們就不詳細(xì)論述了

我們來看一個(gè)例子

function TestArguments() {var testArray = Array.prototype.slice.call(arguments); //把a(bǔ)rguments轉(zhuǎn)換成了真正的數(shù)組// var testArray = [].slice.call(arguments); //也可以這樣簡(jiǎn)寫,也是把a(bǔ)rguments轉(zhuǎn)換成數(shù)組 var sum = 0;testArray.forEach( //可以調(diào)用數(shù)組的forEach方法function(value){sum += value; });return sum; }

當(dāng)然,也可以調(diào)用JavaScript中的Array.from()方法來把a(bǔ)rguments轉(zhuǎn)換為真正的數(shù)組

JS中的Array.from()方法就是用來從一個(gè)類似數(shù)組或者可迭代對(duì)象中創(chuàng)建一個(gè)新的數(shù)組實(shí)例.? 我們還是來看一個(gè)例子

function testfunc() {return Array.from(arguments); }testfunc(7,8,9); //輸出 [7,8,9]

?4.? 用arguments來模擬重載

我們知道C# 語言中有重載,但是JavaScript中沒有重載. 我們舉一個(gè)例子來說明JavaScript中沒有重載

function add(arg1,arg2) //第1個(gè)add方法 {console.log("第一個(gè)add方法");return arg1 + arg2;}function add(arg1,arg2,arg3) //第2個(gè)add方法 {console.log("第2個(gè)add方法");return arg1 + arg2 + arg3;}add(1,2); //輸出 第2個(gè)add方法 add(1,2,3); //輸出 第2個(gè)add方法

在上面的例子中,我們可以看到,函數(shù)調(diào)用的始終都是第2個(gè)add方法, 因?yàn)镴avaScript是按照順序來執(zhí)行的. 而不是像C#中那樣,存在函數(shù)重載,會(huì)根據(jù)參數(shù)的不同調(diào)用不同的重載函數(shù)?

但是我們?nèi)绻雽?shí)現(xiàn)這樣的重載效果,有沒有方法來實(shí)現(xiàn)呢。 思考一下,它本質(zhì)上就是根據(jù)參數(shù)個(gè)數(shù)不同輸出不一樣的結(jié)果,而實(shí)際傳入的參數(shù)個(gè)數(shù)是可以通過arguments來判斷的。?

我們來寫一個(gè)例子

function add(arg1,arg2,arg3) {if(arguments.length === 2){console.log(arg1 + arg2);} else if (arguments.length === 3){console.log(arg1 + arg2 + arg3);}}add(5,5); //輸出 10 add(5,5,5); // 輸出 15

?5. arguments與默認(rèn)參數(shù)

我們知道C#中有默認(rèn)參數(shù),我們來看看C#中默認(rèn)參數(shù)的例子

public string add(int a, int b = 10, int c = 15) {return a + b + c; }

?在這個(gè)例子中,傳入的參數(shù)b的默認(rèn)值為10, c的默認(rèn)值為15. 也就是說我們?cè)谡{(diào)用add函數(shù)時(shí),如果沒有給b和c傳值的話,就會(huì)使用它們的默認(rèn)值10和15

那么,在JavaScript中,有沒有同樣的參數(shù)默認(rèn)值設(shè)定呢,答案是有的,我們來看一個(gè)例子

function testfunc(firstArg = 0, secondArg =1) {console.log(firstArg,secondArg); }testfunc(100); //輸出 100 1

看上面這個(gè)JavaScript函數(shù),有兩個(gè)參數(shù)firstArg,secondArg. 兩個(gè)參數(shù)都有默認(rèn)值,當(dāng)調(diào)用該函數(shù)testfunc(100) 時(shí),傳入了一個(gè)參數(shù)100,自然就是覆蓋了第一個(gè)參數(shù),第2個(gè)參數(shù)沒有傳入,自然會(huì)取它的默認(rèn)值1,所以輸出100,1

那這個(gè)又跟我們這篇博客中的arguments有什么關(guān)系的,我們來把它修改一下看看

function testfunc(firstArg = 0, secondArg =1) {console.log(arguments[0],arguments[1]);console.log(firstArg,secondArg); }testfunc(100); //輸出 100 undefined 100 1

?

上面可以看到,當(dāng)調(diào)用函數(shù)testfunc(100) 時(shí), console.log(arguments[0],arguments[1]) 輸出的是 100 undefined, 也就是說arguments[1]還是沒有值,它沒有取默認(rèn)傳入的參數(shù)secondArg=1

這樣符合arguments的定義,arguments指的是調(diào)用函數(shù)時(shí),實(shí)際傳入的參數(shù),在上面例子中,調(diào)用函數(shù)testfunc(100), 實(shí)際傳入的參數(shù)就是只有一個(gè)100. 由此可見,默認(rèn)參數(shù)對(duì)arguments完全沒有影響

?

轉(zhuǎn)載于:https://www.cnblogs.com/wphl-27/p/9467422.html

總結(jié)

以上是生活随笔為你收集整理的JavaScript学习系列3 -- JavaScript arguments对象学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。