摘要:今天來討論一下中的基本包裝對象也叫基本包裝類型,之前剛學(xué)到這里的時(shí)候,自己也是一頭霧水,不明白這個(gè)基本包裝對象到底是個(gè)什么鬼,后來找了很多資料,終于看清了它的真面目?;绢愋鸵妙愋偷?,說白了就是對象。。。
今天來討論一下JS中的基本包裝對象(也叫基本包裝類型),之前剛學(xué)到這里的時(shí)候,自己也是一頭霧水,不明白這個(gè)基本包裝對象到底是個(gè)什么鬼,后來找了很多資料,終于看清了它的真面目。首先呢,我們現(xiàn)在復(fù)習(xí)一下JS的數(shù)據(jù)類型,JS數(shù)據(jù)類型被分為了兩大門派,基本類型和引用類型。
基本類型:`Undefined`,`Null`,`Boolean`,`Number`,`String` 引用類型:`Object`,`Array`,`Date`,`RegExp`等,說白了就是對象。。。
我們都知道,引用類型有方法和屬性,但是基本類型是木有的,但是你一定見過這樣的代碼
var str = "hello"; //string 基本類型 var s2 = str.charAt(0); alert(s2); // h
毫無疑問上面的string是一個(gè)基本類型,但是它卻能召喚出一個(gè)charAt()的方法,這是什么原因呢?
主要是因?yàn)樵诨绢愋椭?,有三個(gè)比較特殊的存在就是:String Number Boolean,這三個(gè)基本類型都有自己對應(yīng)的包裝對象。并且隨時(shí)等候召喚。包裝對象呢,其實(shí)就是對象,有相應(yīng)的屬性和方法。至于這個(gè)過程是怎么發(fā)生呢,其實(shí)是在后臺偷偷發(fā)生的。
來看個(gè)栗子
//我們平常寫程序的過程: var str = "hello"; //string 基本類型 var s2 = str.charAt(0); //在執(zhí)行到這一句的時(shí)候 后臺會自動完成以下動作 : //相當(dāng)于: ( var str = new String("hello"); // 1 找到對應(yīng)的包裝對象類型,然后通過包裝對象創(chuàng)建出一個(gè)和基本類型值相同的對象 var s2 = str.chaAt(0); // 2 然后這個(gè)對象就可以調(diào)用包裝對象下的方法,并且返回結(jié)給s2. str = null; // 3 之后這個(gè)臨時(shí)創(chuàng)建的對象就被銷毀了, str =null; ) ` alert(s2);//h alert(str);//hello 注意這是一瞬間的動作 實(shí)際上我們沒有改變字符串本身的值。就是做了下面的動作.這也是為什么每個(gè)字符串具有的方法并沒有改變字符串本身的原因。
由此我們可以知道,引用類型和基本包裝對象的區(qū)別在于:生存期
引用類型所創(chuàng)建的對象,在執(zhí)行的期間一直在內(nèi)存中,而基本包裝對象只是存在了一瞬間。
所以我們無法直接給基本類型添加方法:
舉個(gè)栗子
var str = "hello"; str.number = 10; //假設(shè)我們想給字符串添加一個(gè)屬性number ,后臺會有如下步驟 // 相當(dāng)于 { var str = new String("hello"); // 1 找到對應(yīng)的包裝對象類型,然后通過包裝對象創(chuàng)建出一個(gè)和基本類型值相同的對象 str.number = 10; // 2 通過這個(gè)對象調(diào)用包裝對象下的方法 但結(jié)果并沒有被任何東西保存 str =null; // 3 這個(gè)對象又被銷毀 } alert(str.number); //undefined 當(dāng)執(zhí)行到這一句的時(shí)候,因?yàn)榛绢愋捅緛頉]有屬性,后臺又會重新重復(fù)上面的步驟 //相當(dāng)于 { var str = new String("hello"); // 1 找到基本包裝對象,然后又新開辟一個(gè)內(nèi)存,創(chuàng)建一個(gè)值為hello對象 str.number = undefined // 2 因?yàn)榘b對象下面沒有number這個(gè)屬性,所以又會重新添加,因?yàn)闆]有值,所以值是未定 ;然后彈出結(jié)果 str =null; // 3 這個(gè)對象又被銷毀 }
那么我們怎么才能給基本類型添加方法或者屬性呢?
答案是在基本包裝對象的原型下面添加,每個(gè)對象都有原型。
來看個(gè)栗子
//給字符串添加方法 要寫到對應(yīng)的包裝對象的原型下才行 var str = "hello"; String.prototype.last= fuction(){ return this.charAt(this.length); }; str.last(); // 5 執(zhí)行到這一句,后臺依然會偷偷的干這些事 //相當(dāng)于 { var str = new String("hello");// 找到基本包裝對象,new一個(gè)和字符串值相同的對象, str.last(); // 通過這個(gè)對象找到了包裝對象下的方法并調(diào)用 str =null; // 這個(gè)對象被銷毀 }
看注釋相信能看出創(chuàng)建在基本包裝對象原型下面的方法和屬性才能被保存。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102101.html
摘要:平時(shí)在復(fù)習(xí)基礎(chǔ)知識時(shí),經(jīng)常會遇到數(shù)據(jù)類型基礎(chǔ)數(shù)據(jù)類型內(nèi)置對象包裝類型對象,檢測數(shù)據(jù)類型時(shí),用到的值,感覺都差不多,但是又有差異。值與數(shù)據(jù)類型關(guān)系對比下圖,即可知值相較于基礎(chǔ)數(shù)據(jù)類型少多 平時(shí)在復(fù)習(xí)JS基礎(chǔ)知識時(shí),經(jīng)常會遇到JS數(shù)據(jù)類型、基礎(chǔ)數(shù)據(jù)類型、內(nèi)置對象、包裝類型對象,檢測數(shù)據(jù)類型時(shí),用到的typeof值,感覺都差不多,但是又有差異。今天特地整理下,方便理解。 JS數(shù)據(jù)類型 基礎(chǔ)數(shù)...
摘要:知識點(diǎn)閉包問題執(zhí)行機(jī)制定時(shí)器線程理解構(gòu)造函數(shù)內(nèi)的方法與構(gòu)造函數(shù)屬性上方法的對比中都經(jīng)歷了什么深入理解中的屬性和特性中的方法詳解為什么編程語言的都要定義數(shù)據(jù)類型中與的區(qū)別輕松理解基本包裝對象中數(shù)據(jù)類型內(nèi)置對象包裝類型對象關(guān)系基礎(chǔ)之?dāng)?shù)組中的邏輯 JS知識點(diǎn) JS hoist JS閉包問題 JS執(zhí)行機(jī)制 JS定時(shí)器線程理解 構(gòu)造函數(shù)內(nèi)的方法與構(gòu)造函數(shù)prototype屬性上方法的對比 JS...
摘要:最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點(diǎn)匯總一下。參考網(wǎng)站面試題圖片過多的時(shí)候如何優(yōu)化圖標(biāo)很多的時(shí)候可以用雪碧圖圖片過大時(shí)候可以壓縮一下。 最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是ES6語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點(diǎn)匯總一下。有助于下次面試。 1.H...
摘要:最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點(diǎn)匯總一下。參考網(wǎng)站面試題圖片過多的時(shí)候如何優(yōu)化圖標(biāo)很多的時(shí)候可以用雪碧圖圖片過大時(shí)候可以壓縮一下。 最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是ES6語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點(diǎn)匯總一下。有助于下次面試。 1.H...
閱讀 2960·2021-11-23 09:51
閱讀 3786·2021-11-22 15:29
閱讀 3244·2021-10-08 10:05
閱讀 1568·2021-09-22 15:20
閱讀 983·2019-08-30 15:56
閱讀 1081·2019-08-30 15:54
閱讀 741·2019-08-26 11:54
閱讀 2643·2019-08-26 11:32