2022-04-10 JavaScript函數(shù)方法和其他對(duì)象

我大受震撼

主要補(bǔ)充兩個(gè)函數(shù)相關(guān)的方法call和apply。以及學(xué)習(xí)除了函數(shù)對(duì)象之外一些常用的對(duì)象類型。

1.call和apply

call和apply是函數(shù)的兩個(gè)比較常用的方法沸版。兩個(gè)方法都是函數(shù)對(duì)象的方法,需要通過(guò)函數(shù)來(lái)調(diào)用。兩個(gè)方法都可以指定一個(gè)對(duì)象為參數(shù)尚氛,這個(gè)對(duì)象會(huì)被指定為調(diào)用這兩個(gè)方法的函數(shù)的this,也就是說(shuō)我們可以使用這兩個(gè)方法將函數(shù)應(yīng)用于我們指定的對(duì)象洞渤。
除了傳入對(duì)象作為參數(shù)之外阅嘶,還可以將實(shí)參傳入這兩個(gè)方法。這里二者就有不同的地方,call傳入可以直接在對(duì)象參數(shù)的后面?zhèn)魅雽?shí)參讯柔,而在apply方法中傳入實(shí)參的時(shí)候抡蛙,必須將實(shí)參封裝到一個(gè)數(shù)組中

        function fun(a, b) {
            console.log(this.name);
            console.log(a);
            console.log(b);
        };

        let person = {
            name:"Jack"
        };

        // fun.call(person, 2, 3);//調(diào)用call方法函數(shù)執(zhí)行
        fun.apply(person, [2, 3]);//調(diào)用apply方法函數(shù)執(zhí)行

2.arguments

函數(shù)在被調(diào)用的時(shí)候魂迄,瀏覽器會(huì)默認(rèn)向其中傳入一個(gè)參數(shù)this粗截,關(guān)于this的指向這里不在過(guò)多的介紹。其實(shí)除了this之外捣炬,還有另外一個(gè)參數(shù)也會(huì)默認(rèn)傳遞進(jìn)函數(shù)熊昌,這個(gè)就是arguments。它是一個(gè)類數(shù)組對(duì)象湿酸,和數(shù)組一樣可以通過(guò)索引對(duì)內(nèi)部的元素進(jìn)行操作婿屹。我們?cè)谡{(diào)用函數(shù)的時(shí)候向函數(shù)內(nèi)部傳入的實(shí)參都被封裝在了arguments中。

        function fun() {
            console.log(arguments.length);//2
            console.log(arguments[0]);
            console.log(arguments[1]);
        };

        fun("hello",true);//未定義形參 但是通過(guò)索引我們依然訪問(wèn)到了實(shí)參

arguments還有一個(gè)需要掌握的方法callee推溃,它會(huì)指向一個(gè)函數(shù)對(duì)象昂利,該函數(shù)對(duì)象就是當(dāng)前正在執(zhí)行的函數(shù)

        function def() {
            console.log(arguments.callee);
        };

3.Date對(duì)象

date在英語(yǔ)中的意思是日期铁坎。所以在JavaScript中它表示的是一個(gè)時(shí)間相關(guān)的對(duì)象蜂奸。直接看代碼來(lái)看該對(duì)象的使用。

        let day = new Date("12/06/2022 12:36:18");//傳入表示時(shí)間的字符串 即可創(chuàng)建一個(gè)指定時(shí)間的對(duì)象
        //時(shí)間的格式  月/日/年 時(shí):分:秒
        console.log(day);

Date作為一個(gè)JavaScript中內(nèi)置的對(duì)象厢呵,我們可以直接使用窝撵。既然是對(duì)象那么它就有自己所獨(dú)有的一些方法

        /*針對(duì)Date對(duì)象的方法
        * getDate 獲取日期 也就是幾號(hào)
        * getDay 獲取星期幾 注意范圍為0-6 0表示周日
        * getMonth 獲取月份 0表示1月 1表示2月 以此類推
        * getFullYear 獲取年份
        * 。襟铭。碌奉。詳細(xì)的可以查看W3C的手冊(cè)*/

        // let d = time.getDate();
        // let d = time.getDay();
        // let d = time.getMonth();
        let d = time.getHours();
        console.log(d);

        /*getTime 獲取當(dāng)期對(duì)象日期的時(shí)間戳
        *   表示的實(shí)際上時(shí)格林威治時(shí)間(1970年1月1日 0時(shí)0分0秒)至日期對(duì)象所花費(fèi)的毫秒數(shù)
        *   計(jì)算機(jī)底層保存時(shí)間都是使用的時(shí)間戳*/
        let c = time.getTime();
        console.log(c);

        /*Date.now
        *   獲取執(zhí)行當(dāng)前代碼的時(shí)間戳的方法
        *   可以用來(lái)計(jì)算程序的運(yùn)行時(shí)間
        * */

這里特別注意getDate和getDay獲取的分別是日期和一周中的"周幾",以及在JavaScript中描述周幾和幾月的方法跟我們?nèi)粘5纳钍遣灰粯拥摹?br> 另外一個(gè)值得關(guān)注的Date對(duì)象的方法寒砖,Date.now赐劣。它獲取的是執(zhí)行當(dāng)前這行代碼的時(shí)間戳,利用這個(gè)特性哩都,我們?cè)谝欢未a的開頭和結(jié)尾處各添加一行該代碼魁兼,二者結(jié)果相減就能直觀地體現(xiàn)代碼的執(zhí)行時(shí)間.比如測(cè)試瀏覽器打印1-1000時(shí)花費(fèi)的時(shí)間。

        let start = Date.now();
        for (let i = 0; i <= 1000; i++) {
            console.log(i);
        };
        let end = Date.now();
        console.log(end-start);

更多Date對(duì)象相關(guān)方法查閱W3C漠嵌。JavaScript Date 參考手冊(cè) (w3school.com.cn)

4.Math對(duì)象

很明顯咐汞,這個(gè)對(duì)象就是一些包含了數(shù)學(xué)運(yùn)算相關(guān)方法的對(duì)象。其中包含了一些常用的數(shù)學(xué)運(yùn)算操作包括開平發(fā)儒鹿,取整化撕,生成隨機(jī)數(shù)等等。下面的代碼展示了一些常用的方法约炎。

        /*Math對(duì)象
        *   Math和其他類不同 他不是構(gòu)造函數(shù)
        *   Math是一個(gè)工具類 里面封裝了一些數(shù)學(xué)運(yùn)算相關(guān)的屬性和方法
        *       Math.PI表示的就是圓周率
        *       Math.abs表示獲取絕對(duì)值*/

        let a = -12.394;
        console.log(Math.abs(a));

        /*ceil 對(duì)數(shù)據(jù)向上取整
        * floor 對(duì)數(shù)據(jù)向下取整數(shù)
        * round 對(duì)數(shù)據(jù)四舍五入 也就是取到相隔最近的整數(shù)*/
        console.log(Math.ceil(1.1));
        console.log(Math.floor(1.9));
        console.log(Math.round(1.3));

        /*random 生成0-1之間的一個(gè)隨機(jī)數(shù)
        * 如果要生成一個(gè)x--y之間的隨機(jī)數(shù) 則使用
        * Math.round(Math.random()*(y - x)) + x*/
        for (let i = 0; i < 11; i++) {
            console.log(Math.round(Math.random()*5) + 2);
        };

        /*max 獲取多個(gè)數(shù)中的最大值
        * min 獲取多個(gè)數(shù)中的最小值*/

        let max = Math.max(1,54,79,19,1);
        console.log(max);

        /*pow(x,y)
        *   返回x的y次冪
        *
        * sqrt()
        *   返回一個(gè)數(shù)的平方根*/

        let mi = Math.pow(2, 10);
        console.log(mi);

更多Math對(duì)象的方法也可以查閱W3C植阴。JavaScript Math 參考手冊(cè) (w3school.com.cn)

5.包裝類

之前提過(guò)蟹瘾,類就是構(gòu)造函數(shù)的另一個(gè)名字。包裝類就是一類特殊的構(gòu)造函數(shù)掠手,它們會(huì)將基本類型的數(shù)據(jù)轉(zhuǎn)換為對(duì)象憾朴。只要是Number String Boolean這三個(gè)包裝類,它們會(huì)將與它們名字對(duì)應(yīng)的基本類型的數(shù)據(jù)轉(zhuǎn)換為對(duì)象喷鸽。下面的代碼使用了包裝類众雷,并且驗(yàn)證了它們的作用。

        let a = new String("name");
        let str = "name";
        console.log(a === str);//值相同 但是數(shù)據(jù)類型不一樣

實(shí)際開發(fā)當(dāng)中魁衙,我們一般不會(huì)手動(dòng)使用包裝類來(lái)轉(zhuǎn)換基本類型的數(shù)據(jù)报腔。之所以介紹它是因?yàn)榘b類時(shí)瀏覽器自動(dòng)調(diào)用的,我們需要了解這個(gè)機(jī)制剖淀。比如下面的代碼

        let b = 123;
        b = b.toString();
        console.log(b);
        console.log(typeof b);

b作為Number類型的數(shù)據(jù)是不可能去調(diào)用toString()方法的纯蛾,之索引這里代碼沒(méi)有報(bào)錯(cuò),就是因?yàn)闉g覽器自動(dòng)調(diào)用包裝類纵隔,將數(shù)據(jù)類型進(jìn)行了一個(gè)臨時(shí)的轉(zhuǎn)換翻诉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捌刮,隨后出現(xiàn)的幾起案子碰煌,更是在濱河造成了極大的恐慌,老刑警劉巖绅作,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芦圾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俄认,警方通過(guò)查閱死者的電腦和手機(jī)个少,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)眯杏,“玉大人夜焦,你說(shuō)我怎么就攤上這事∑穹罚” “怎么了茫经?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)萎津。 經(jīng)常有香客問(wèn)我卸伞,道長(zhǎng),這世上最難降的妖魔是什么锉屈? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任荤傲,我火速辦了婚禮,結(jié)果婚禮上部念,老公的妹妹穿的比我還像新娘弃酌。我一直安慰自己,他們只是感情好儡炼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布妓湘。 她就那樣靜靜地躺著,像睡著了一般乌询。 火紅的嫁衣襯著肌膚如雪榜贴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天妹田,我揣著相機(jī)與錄音唬党,去河邊找鬼。 笑死鬼佣,一個(gè)胖子當(dāng)著我的面吹牛驶拱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晶衷,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蓝纲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了晌纫?” 一聲冷哼從身側(cè)響起税迷,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锹漱,沒(méi)想到半個(gè)月后箭养,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哥牍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年毕泌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砂心。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡懈词,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辩诞,到底是詐尸還是另有隱情坎弯,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布译暂,位于F島的核電站抠忘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏外永。R本人自食惡果不足惜崎脉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伯顶。 院中可真熱鬧囚灼,春花似錦骆膝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蝎抽,卻和暖如春政钟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背樟结。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工养交, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓢宦。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓碎连,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驮履。 傳聞我的和親對(duì)象是個(gè)殘疾皇子破花,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容