為了便于操作基本類型值,ECMAScript還提供了3個特殊的引用類型:Boolean、Number和String。這些類犁與前面介紹的其他引用類型相似,但同時也具有與各自的基本類型相應(yīng)的特殊行為。實(shí)際上,每當(dāng)讀取一個基本類型值的時候,后臺就會創(chuàng)建一個對應(yīng)的基本包裝類型的對象,從而讓我們能夠調(diào)用一些方法來操作這些數(shù)據(jù)。來看下面的例子:
var sl="some text";
var s2=sl.substring(2);
這個例子中的變量sl包含一個字符串,字符串當(dāng)然是基本類型值。而下一行調(diào)用了sl的substring()方法,并將返回的結(jié)果保存在了s2中。我們知道,基本類型值不是對象,因而從邏輯上講它們不應(yīng)該有方法(盡管如我們所愿,它們確實(shí)有方法)。其實(shí),為了讓我們實(shí)現(xiàn)這種直觀的操作,后臺已經(jīng)自動完成了一系列的處理。當(dāng)?shù)诙写a訪問sl時,訪問過程處于一種讀取模式,也就是要從內(nèi)存中讀取這個字符串的值。而在讀取模式中訪問字符串時,后臺都會自動完成下列處理:
(1)創(chuàng)建String類型的一個實(shí)例;
(2)在實(shí)例上調(diào)用指定的方法;
(3)銷毀這個實(shí)例。
可以將以上三個步驟想象成是執(zhí)行了下列ECMAScript代碼:
var sl=new String("some text");
var s2=s1.substring(2);
sl=null;
經(jīng)過此番處理,基本的字符串值就變得跟對象一樣了。而且,上面這三個步驟也分別適用于Boolean和Number類型對應(yīng)的布爾值和數(shù)字值。
引用類型與基本包裝類型的主要區(qū)別就是對象的生存期。使用new操作符創(chuàng)建的引用類型的實(shí)例,在執(zhí)行流離開當(dāng)前作用域之前都一直保存在內(nèi)存中。而自動創(chuàng)建的基本包裝類型的對象,則只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀。這意味著我們不能在運(yùn)行時為基本類型值添加屬性和方法。來看下面的例子:
var sl="some text":
sl.color="red";
alert (sl.color); //undefined
在此,第二行代碼試圖為字符串sl添加一個color屬性。但是,當(dāng)?shù)谌写a再次訪問sl時,其color屬性不見了。問題的原因就是第二行創(chuàng)建的String對象在執(zhí)行第三行代碼時已經(jīng)被銷毀了。第三行代碼又創(chuàng)建自己的String對象,而該對象沒有color屬性。
當(dāng)然,可以顯武地調(diào)用Boolean、Number和String來創(chuàng)建基本包裝類型的對象。不過,南昌網(wǎng)站建設(shè)公司技術(shù)員認(rèn)為應(yīng)該在絕對必要的情況下再這樣做,因?yàn)檫@種做法很容易讓人分不清自己是在處理基本類型還是引用類型的值。對基本包裝類型的實(shí)例調(diào)用typeof會返回"object",而且所有基本包裝類型的對象都會被轉(zhuǎn)換為布爾值true。
盡管我們不建議顯式地創(chuàng)建基本包裝類型的對象,但它們操作基本類型值的能力還是相當(dāng)重要的。而每個基本包裝類型都提供了操作相應(yīng)值的便捷方法。
希望對廣大站長或網(wǎng)站建設(shè)公司或從事企業(yè)網(wǎng)站建設(shè)的團(tuán)隊(duì)有所幫助,如對此不太理解的,可以與南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)技術(shù)部聯(lián)系。我們很高與廣大站長和網(wǎng)站建設(shè)公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗(yàn)。