為了便於操作基本型別值,ecmascript還提供了3個特殊的引用型別:boolean、number和string。這些型別與本章介紹的其他引用型別相似,但同時也具有與各自的基本型別相應的特殊行為。實際上,每當讀取乙個基本型別值得時候,後台就會建立乙個對應的基本包裝型別的物件,從而讓我們能夠呼叫一些方法來操作這些資料。如下例子:
var s1="some text";var s2=s1.substring(2);
這個例子中的變數s1包含乙個字串,字串當然是基本型別值,而下一行**呼叫了s1的substring()方法,並將返回的結果儲存在了s2中。我們知道,基本型別值不是物件,因而從邏輯上講它們不應該有方法(儘管如我們所願,它們確實有方法)。其實,為了讓我們實現這種直觀的操作,後台已經自動完成了一系列的處理。當第二行**訪問s1時,訪問過程處於一種讀取模式,也就是呀從記憶體中讀取這個字串的值。而在讀取模式中訪問字串時,後台都會自動完成下列處理。
建立string型別的乙個例項;
在例項上呼叫指定的方法;
銷毀這個例項。
可以將以上三個步驟想象成是執行了下列ecmascript**。
var s1=new string("some text");var s2=s1.substring(2);
s1=null;
經過此番處理,基本的字串值就變得跟物件一樣了,而且,上面這三個步驟也分別適用於boolean和number型別對應的布林值和數字值。
引用型別與基本包裝型別的主要區別就是物件的生存期。使用new操作符建立的引用型別的例項,在執行流離開當前作用域之前都一直儲存在記憶體中。而自動建立的基本包裝型別的物件,則只存在於一行**的執行瞬間,然後立即被銷毀。這意味著我們不能再執行時為基本型別值新增屬性和方法。如下面例子:
var s1="some text";s1.color="red";
alert(s1.color);//undefined
在此,第二行**試圖為字串s1新增乙個color屬性。但是,當第三行**在此訪問s1時,其color屬性不見了。問題的原因就是第二行建立的string物件在執行第三行**時已經被銷毀了。第三行**又建立自己的string物件,而該物件沒有color屬性。
當然,可以顯示的滴呼叫boolean、number和string來建立基本包裝型別的物件。不過,應該在絕對必要的情況下再這樣做,因為這種做法很容易讓人分不清自己是在處理基本包裝型別還是引用基本包裝型別的值。對基本包裝型別的例項呼叫typeof會返回「object」,而且所有基本包裝型別的物件都會被轉換為布林值true。
object建構函式也會像工廠方法一樣,根據傳入值得型別返回相應基本包裝型別的例項。例如:
var obj=new object("some text");alert(obj instanceof string);//true
把字串傳給object建構函式,就會建立string的例項;而傳入數值引數會得到number的例項,傳入布林值引數就會得到boolean的例項。
要注意的是,使用new呼叫基本包裝型別的建構函式,與直接呼叫同名的轉型函式是不一樣的。例如:
var value="25";var number=number(value); //轉型函式
alert(typeof number); //"number"
var obj=new number(value); //建構函式
alert(typeof obj); //"object"
在這個例子中,變數number中儲存的是基本型別的值25,而變數obj中儲存的是number的例項。
儘管我們不建議顯式的建立基本包裝型別的物件,但它們操作基本型別值的能力還是相當重要的。而每個基本包裝型別都提供了操作相應值的便捷方法。
基本包裝型別
好久之前看的高程,最近有些忘記了,疑惑基本包裝型別存在的意義,下面總結一下 為了便於操作基本型別,ecmascript提供了三個特殊的引用型別 boolean number string。實際上,每當讀取乙個基本型別值的時候,後台就會建立乙個對應的基本包裝型別的物件,從而讓我們能夠呼叫一些方法來操作...
基本包裝型別
為了便於操作基本資料型別,提供了三個特殊的引用型別,boolean,number和string,這些型別和其他引用型別相似,但是同時也具備和自己相應的資料型別的特殊行為,實際上每當讀取乙個基本型別的數值後,後台都會為我們建立對應的基本包裝型別的物件,從而能夠呼叫一些方法處理這些資料。var box ...
基本包裝型別
基本包裝型別有number boolean string三種。主要用途是擴充套件基本資料型別number boolean string的功能。因為這些基本資料型別本身不具備任何方法。在基本資料型別操作時,比如 abc substr 0,2 在執行這段 時,實際上 abc 是乙個基本資料型別,本身並沒...