1. 程式人生 > >JavaScript-內建物件和包裝型別

JavaScript-內建物件和包裝型別

作為JS面試題中經常被問到的考點,怎麼能不好好了解+理解呢?或許標題中的名詞我們不是很瞭解,但是我相信我們一定都實踐過,而且不止一次,只不過當時我們或許停留在使用的層次,沒有深入瞭解原理,在此之前的我也是這樣的。不過學習知識,果真是“N+1”模式!

相信大家還記得C#中定義一個字串 string s1="雨田";但是有些時候我們會見到String這個字串的類;然後傻傻的分不清楚了;現在看來的話,應該是預設封裝了一個String類,然後封裝了針對此類的各種操作API函式,這也是為什麼我們可以(s1.函式名(引數))的原因,不過C#這門語言中究竟是怎麼使用的,我還真沒去了解;不過自以為應該和JS(今天聊的)差不多,所以直接進入正題。

什麼是內建物件呢?

定義:ES標準中規定的,瀏覽器廠商已經實現的物件(首字母大寫);

包括:【String、Number、Boolean】、【Array、Date、Math、RegExp】、【Error】、【Function、Object】、【Global】;

----------當然如果這樣聊的話,確實沒有sh深入挖掘的知識點,不過看“標題”-包裝型別,這才是本篇部落格的核心知識點。---------

什麼是包裝型別?

定義:專門封裝原始型別的值,並提供操作原始型別值的API;

PS:原始型別就是自定義的字串、數字、True/False;

包括:【String、Number、Boolean】;

為什麼:原始型別的值本身不具有任何功能;

何時發揮作用:試圖對原始型別的值呼叫函式時,引擎會自動建立對應型別的包裝型別物件

              包括:1:封裝原始型別的值;2:呼叫包裝型別中方法操作原始型別;

------------------------------------單靠理論性的文字說破天也不好明白,不妨寫一個例子,咱們一塊來了解下----------------------------------------

var str="雨田";宣告一個字串型別

str.Height=183;//換做C#,一定不會點出這種方法,其實JS中也沒有,不過確可以人為定義,當做屬性使用;
//過程解析:
    //1:試圖對原始型別的值呼叫任何函式時,也就是str.Height
    //2:判斷原始型別的型別名,也就是type of str,也就是字串型別
    //3:自動建立物件的字串包裝型別物件,其中儲存要操作的原始型別的值
    //4:呼叫包裝型別物件(String)中提前定義好的API,這裡.Height不屬於提前定義好的,所以預設在              String中新增.Height這個API;
    //5:API被呼叫後,包裝型別String會自動釋放,剛新增的.Height這個API也就一塊走了;

console.log(str.Height);
//過程解析:
    //1:試圖對原始型別的值呼叫任何函式時,也就是str.Height
    //2:判斷原始型別的型別名,也就是type of str,也就是字串型別
    //3:“重新”自動建立物件的字串包裝型別物件,其中儲存要操作的原始型別的值
    //4:正因為String包裝型別中不存在,所以輸出“未定義”這個提示

//結果:
Underfined//表示未定義

//相信大家可能會和我一樣以為輸出10,但是不盡人意,那麼該過程究竟做了一個什麼事情呢?詳見程式碼解析,簡簡單單三行程式碼竟然做了兩次建立包裝型別物件;

-------------------------------------------然後咱們再來回顧,之前使用過的字串轉換為大寫的函式-------------------------------------------------------

var unicode="YuTian".toUpperCase();
//程式碼解析
    //1:程式碼還原為var unicode=new String("YuTian").toUpperCase();
    //2:做完此函式操作後,然後賦值給Unicode,這裡是格外注意的地方
    //3:(2)中的操作同樣詮釋了為什麼針對字串操作後,不改變原字串的值,而需要重新進行賦值。

/*-------------------------------------------------------------------------------------*/

//既然說到這裡,咱們一塊來改改上面那個例子的程式碼吧!詳細大家一定有了思路了
var str=new String("雨田");
//這裡再建立完包型別後,將地址存放在str中,保證不會被回收;
str.height=183;
//過程見例項一的解析
console.lot(str.money);
//儲存的是剛剛未被回收的包型別的Height這個API函式;

 以上就是本篇部落格的核心知識點,瀏覽以及閱讀的博友,記得留言、點贊、轉發   一條龍吆!下篇部落格更精彩........