1.背景介紹
引用類型的值(對象)是一個引用類型的一個實例。在ECMAScript中,引用類型是一種數據結構,用于將數據和功能組織在一起。它也通常稱為類。
為了便于操作基本類型值,ECMAScript提供了3個特殊的引用類型:Boolean、Number和String。這些類型與其他引用類型相似,但同時也具有與各自的基本類型相應的特殊行為。實際上,每當讀取一個基本類型值的時候,后臺就會創建一個對應的基本包裝類型的對象,從而能夠調用一些方法來操作這些數據。
2.知識剖析
基本包裝類型概述
var box = 'me';//定義一個字符串
var box2 = box.substring(2);//截掉字符串前兩位
alert(box2);//輸出新字符串
變量box是一個字符串類型,而box.substring(2)又說明它是一個對象(只有對象才會調用方法),最后把處理結果賦值給box2。
字面量寫法:
var box = 'Mr. Lee';//字面量
box.name = 'Lee';//無效屬性
box.age = function () {//無效方法
return 100;
};
alert(box);//Mr. Lee
alert(box.substring(2));//. Lee
alert(typeof box);//string
alert(box.name);//undefined
alert(box.age());//錯誤
new運算符寫法:
var box = new String('Mr. Lee');//new運算符
box.name = 'Lee';//有效屬性
box.age = function () {//有效方法
return 100;
};
alert(box);//Mr. Lee
alert(box.substring(2));//. Lee
alert(typeof box);//object
alert(box.name);//Lee
alert(box.age());//100
以上字面量聲明和new運算符聲明很好的展示了他們之間的區別。不管字面量形式還是new運算符形式,都可以使用它的內置方法。并且Boolean和Number特性與String相同,三種類型可以成為基本包裝類型。
Boolean布爾對象類型:
Boolean類型是布爾值創建的引用類型。創建Boolean類型,可以使用Boolean構造函數去創建,并傳入true或者
false參數。如:var booleanObject = new Boolean(true);
注意:在布爾表達式中使用Boolean對象,我們可能會出錯的一些地方,如:
var booleanObj = new Boolean(false);
var result = booleanObj && true;
console.log(result);
結果是true,因為booleanObj是一個對象,在布爾表達式中,所有的對象都會被轉換為true。記住:引用類型的布爾值,其實是對象。當然,我們不推薦這么用(不推薦用引用類型的布爾值來判斷布爾表達式)
Number類型
Number類型是數字值創建的引用類型。創建Number類型,使用Number類型的構造函數,可以傳遞數字值參數,如:
var numberObj = new Number(1024);
numberObj.toFixed()方法:
可以接受一個數值,表示保留的小數的個數(會自動四舍五入)。如果要處理價格問題或者增長率問題,即保留多少為小數,用這個方法非常有效。
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(),接受一個數字參數,返回某個數字索引位置的字符或字符編碼。
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
3.常見問題
引用類型與基本包裝類型的區別?
在于對象的生命周期。使用new關鍵字創建的引用類型的實例,對象在當前作用域都存在。而基本包裝類型自動創建的對象則在對象被調用的時刻存在,調用完畢后,就被銷毀不存在了。
引用類型,也就是對象類型。創建好對象可以調用這個對象下的方法有Object類型,function類型等。
使用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類型。一般情況下,是不建議手動的去創建基本包裝類型的對象,因為這樣經常造成的問題是,分不清自己是在處理基本包裝類型還是引用類型。
4.參考文獻
javaScript對象-基本包裝類型的詳解:
http://www.cnblogs.com/john-sr/p/5731247.html