標籤:介紹 定義 使用 問題 尋找 就會 object 處理 訪問
為了便於操作基本類型值,ES還提供了三種特殊的參考型別,即(基本封裝類型):Number,String,Boolean。這三種類型與前面介紹的參考型別相似,但同時也擁有基礎資料型別 (Elementary Data Type)的一些特性。
平時經常看到人家代碼裡建立了一個字串/數字類型,然後使用字串/數字類型的一些方法,比如,split()、substring()等等,搞得我們誤以為這些方法是基本封裝類型擁有這些方法。其實,我們這種理解是錯誤的。實際上,當我們操作基本封裝類型資料時,在後台就會悄悄的建立一個對應的基本封裝類型的對象。因為是對象呀,所以我們才能夠調用對象所擁有的方法。
舉個例子:
var str = "hello,1024idea";var strSub = str.substring(2,7);console.log(strSub);//llo,1
執行上面代碼,其實,在後台會執行如下步驟:
- 建立基本封裝類型的對象執行個體
- 調用對象執行個體的函數
- 銷毀這個對象
如下所示:
var str = "hello,1024idea";var str2 = new String(str);var strSub = str2.substring(2,7);str2.null;console.log(strSub);//llo,1
參考型別與基本封裝類型的區別:在於對象的生命週期。
使用new關鍵字建立的參考型別的執行個體,對象在當前範圍都存在。而基本封裝類型自動建立的對象則在對象被調用的時刻存在,調用完畢後,就被銷毀不存在了。
Object()建構函式,可以根據你傳入的參數的類型,返回基本封裝類型的執行個體。你傳入字串,則返回String類型的執行個體;傳入數字,則返回Number類型的執行個體;傳入布爾值,則返回Boolean類型執行個體。如:
var obj = new Object("hello,1024idea");console.log(obj instanceof String);// true
注意:使用new關鍵字建立的建構函式與使用同名的轉型函數的效果是不一樣的。如:
// 建構函式與轉型函數傳回值的區別var str = "1024";var strObj = new String(str);console.log(typeof strObj);//objectvar strNum = Number(str);console.log(typeof strNum);//number
這個例子中,變數strObj儲存的是object類型,而變數strNum儲存的是number類型。
一般情況下,是不建議手動的去建立基本封裝類型的對象,因為這樣經常造成的問題是,分不清自己是在處理基本封裝類型還是參考型別。
Boolean類型
Boolean類型是布爾值建立的參考型別。建立Boolean類型,可以使用Boolean建構函式去建立,並傳入true或者false參數。如:
var booleanObject = new Boolean(true);
注意:在布林運算式中使用Boolean對象,我們可能會出錯的一些地方,如:
var booleanObj = new Boolean(false);var result = booleanObj && true;console.log(result);
你覺得上面會列印出什麼結果呢?大多數人可能會說是false,因為一真一假嘛,所以為false。但是,事實上結果是true,因為booleanObj是一個對象,在布林運算式中,所有的對象都會被轉換為true。記住:參考型別的布爾值,其實是對象。
當然,我們不推薦這麼用(不推薦用參考型別的布爾值來判斷布林運算式)
Number 類型
Number類型是數字值建立的參考型別。建立Number類型,使用Number類型的建構函式,可以傳遞數字值參數,如:
var numberObj = new Number(1024);
這裡介紹一個Number類型的一個方法:numberObj.toFixed();可以接受一個數值,表示保留的小數的個數(會自動四捨五入)。在平時項目中,我們經常要處理價格問題或者增長率問題,即保留多少為小數,用這個方法非常有效。
// Number 類型var numberObj = new Number(1024.153);console.log(numberObj.toFixed(2));//1024.15console.log(numberObj.toFixed(1));//1024.2
String類型
String類型是字串值建立的參考型別。
String類型建立的方式,使用String建構函式建立,可以傳入字串參數;如:
var stringOjb = new String("hello,1024idea");
String類型的每個執行個體都有一個length屬性,用於計算字串的長度(即字串中包含多少個字元)。
字元方法:charAt(),charCodeAt(),接受一個數字參數,返回某個數字索引位置的字元或字元編碼。
在ES5還定義了另一個訪問字串中某個字元的方法,在支援ES5的瀏覽器中,可以用方括弧[]來訪問。
// String類型var str = "hello,1024idea";console.log(str.charAt(4));//oconsole.log(str.charCodeAt(4));//111console.log(str[4]);//o
字串的操作方法:concat(),可以將多個字串串連起來。返回得到的新字串。
var str1 = "hello,";var str2 = str1.concat("1024idea");console.log(str2);//hello,1024idea
其實,實踐中,我們平時用的多的還是用“+”去拼接字串。
slice(),substring(),substr().這三個是截取字串的函數。其中,slice()跟substring()非常類似,第一個參數都是截取的起始位置,第二個參數是截取的終止位置;而substr()第一個參數是起始位置,第二個參數則是需要截取的長度。
這三個函數,都不改變原本的字串,只是在原先的字串上建立了一個副本。返回操作副本後的值。
字串的位置方法:indexOf(),lastIndexOf();從索引0的位置開始查詢子字串/從最後一個索引開始尋找字串。如果找到,則返回子字串的位置,如果沒有找到,返回-1;第一個參數為要尋找的子字串,第二個參數 可選的,如果有,則表示從某個位置開始尋找。
ES5中還定義了trim()方法,去除字串的開頭和結尾的所有空格。此外,對於firefox,safari,chrome的後面的一些版本中,還支援非標準的trimLeft()和trimRight()方法,用於刪除字串的開頭空格或結尾空格。
字串的大小寫轉換方法:toLowerCase(),toUpperCase();
5.6 JS中基本封裝類型