JS中基本包裝類型說明需求文檔

爲了便於操作基本類型值,ES還提供了三種特殊的引用類型,即(基本包裝類型):Number,String,Boolean。這三種類型與前面介紹的引用類型相似,但同時也擁有基本數據類型的一些特性。

平時經常看到人家代碼裏創建了一個字符串/數字類型,然後使用字符串/數字類型的一些方法,比如,split()、substring()等等,搞得我們誤以爲基本包裝類型擁有的方法。其實,我們這種理解是錯誤的。實際上,當我們操作基本包裝類型數據時,在後臺就會悄悄的創建一個對應的基本包裝類型的對象。因爲是對象呀,所以我們才能夠調用對象所擁有的方法。

舉個例子:

var str = "hello,1024idea";
var strSub = str.substring(2,7);
console.log(strSub);//llo,1

執行上面代碼,其實,在後臺會執行如下步驟:

  1. 創建基本包裝類型的對象實例

  2. 調用對象實例的函數

  3. 銷燬這個對象

如下所示:

var str = "hello,1024idea";
var strObj = new String(str);
var strObjSub = strObj.substring(2,7);
strObj.null;
console.log(strObjSub);//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);//object

var 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。記住:引用類型的布爾值,其實是對象。

當然,我們不推薦這麼用(不推薦用引用類型的布爾值來判斷布爾表達式)

                             愛創課堂--專業前端技術培訓

                                                         年薪30萬不是夢


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.15
console.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));//o
console.log(str.charCodeAt(4));//111
console.log(str[4]);//o

字符串的操作方法:concat(),可以將多個字符串連接起來。返回得到的新字符串。

var str1 = "hello,";
var str2 = str1.concat("1024idea");
console.log(str2);//hello,1024idea

其實,實踐中,我們平時用的多的還是用“+”去拼接字符串。

split() 將字符串用某個分隔符分割,返回數組。你也可以傳入一個參數,即“分隔符”。

slice(),substring(),substr().這三個是截取字符串的函數。其中,slice()跟substring()非常類似,第一個參數都是截取的起始位置,第二個參數是截取的終止位置;而substr()第一個參數是起始位置,第二個參數則是需要截取的長度。
這三個函數,都不改變原本的字符串,只是在原先的字符串上創建了一個副本。返回操作副本後的值。

字符串的位置方法:indexOf(),lastIndexOf();從索引0的位置開始查詢子字符串/從最後一個索引開始查找字符串。如果找到,則返回子字符串的位置,如果沒有找到,返回-1;第一個參數爲要查找的子字符串,第二個參數 可選的,如果有,則表示從某個位置開始查找。

ES5中還定義了trim()方法,去除字符串的開頭和結尾的所有空格。此外,對於firefox,safari,chrome的後面的一些版本中,還支持非標準的trimLeft()和trimRight()方法,用於刪除字符串的開頭空格或結尾空格。

字符串的大小寫轉換方法:toLowerCase(),toUpperCase();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章