JavaScript包裝物件

謙行發表於2013-08-25

JavaScript是物件導向的語言,使用”.”操作符可以訪問物件的屬性和方法,而對於基本型別(null, undefined, bool, number, string)應該是值型別,沒有屬性和方法,然而

var s='this is a string';
alert(s.length);
alert(s.indexOf('is'));

結果很簡單,但是仔細想想還真奇怪,string不是值型別嗎!怎麼又有屬性又有方法的!

內建物件

JavaScript有一系列內建物件來建立語言的基本功能,具體看一下

Boolean

Boolean 物件表示兩個值:"true" 或 "false"。當作為一個建構函式(帶有運算子 new)呼叫時,Boolean() 將把它的引數轉換成一個布林值,並且返回一個包含該值的 Boolean 物件。如果作為一個函式(不帶有運算子 new)呼叫時,Boolean() 只將把它的引數轉換成一個原始的布林值,並且返回這個值,如果省略 value 引數,或者設定為 0、-0、null、""、false、undefined 或 NaN,則該物件設定為 false。否則設定為 true(即使 value 引數是字串 "false")。

Boolean 物件包括 toStringvalueOf 方法, Boolean 最常用於在 條件語句中 true 或 false 值的簡單判斷,布林值和條件語句的組合提供了一種使用 JavaScript 建立邏輯的方式。

Number

Number物件是一個數值包裝器,該物件包含幾個只讀屬性

  • MAX_VALUE:1.7976931348623157e+308 //JavaScript能夠處理的最大數
  • MIN_VALUE:5e-324 //JavaScript能夠處理的最小數
  • NEGATIVE_INFINITY:-Infiny //負無窮
  • POSITIVE_INFINITY:Infinity //正無窮
  • NaN:NaN //非數字

Number 物件還有一些方法,可以用這些方法對數值進行格式化或進行轉換

  • toExponential //以指數形式返回 數字的字串表示
  • toFixed //把Number四捨五入為指定小數位數的數字
  • toPrecision //在物件的值超出指定位數時將其轉換為指數計數法
  • toString //返回數字的字串表示
  • valueOf //繼承自object

String

String 物件是文字值的包裝器。除了儲存文字,String 物件包含一個屬性和各種 方法來操作或收集有關文字的資訊,String 物件不需要進行例項化便能夠使用。

String 物件只有一個只讀的length屬性用於返回字串的長度。String物件擁有很多方法

  • charAt
  • charCodeAt
  • concat
  • fromCharCode
  • indexOf
  • lastIndexOf
  • match
  • replace
  • search
  • slice
  • split
  • substr
  • substring
  • toLowerCase
  • toUpperCase

包裝物件

除了上面三個物件,JavaScript還擁有Date、Array、Math等內建物件,這三個經常顯示使用,所以非常熟悉,知道了內建物件就可以看看上面例子是怎麼回事兒了。

只要是引用了字串的屬性和方法,JavaScript就會將字串值通過new String(s)的方式轉為內建物件String,一旦引用結束,這個物件就會銷燬。所以上面程式碼在使用的實際上是String物件的length屬性和indexOf方法。

同樣的道理,數字和布林值的處理也類似。,null和undefined沒有對應物件。既然有物件生成,能不能這樣

var s='this is a string';
s.len=10;
alert(s.len);

結果並沒有返回10,而是undefined!不是說好了是個物件嗎!正如剛才提到第二行程式碼只是建立了一個臨時的String物件,隨即銷燬,第三行程式碼又會建立一個新的臨時物件(這就是低版本IE頻繁處理字串效率低的一個原因),自然沒有len屬性。這個建立的臨時物件就成為包裝物件。沒想到一行簡單的程式碼還包含這麼多姿勢。

相關文章