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