一、ECMAScript數據範例
(1)最新的 ECMAScript 規範定義了 7 種 數據範例:
6種 原型範例:
- Boolean. 布爾值,true 和 false.
- null. 一個表明 null 值的特別關鍵字。 JavaScript 是大小寫敏感的,因而 null 與 Null、NULL或其他變量完整差別。
- undefined. 變量未定義時的屬性。
- Number. 示意数字,比方: 42 或許 3.14159。
- String. 示意字符串,比方:”Howdy”
- Symbol ( 在 ECMAScript 6 中新增加的範例).。一種數據範例,它的實例是唯一且不可轉變的。
以及 Object 對象
(2)這7種數據範例中,對象為“援用範例”,其他六種為“原始範例”(或叫“基礎範例”)。
二、原始範例沒有屬性和要領
(1)按原始範例和援用範例的定義來講,只要援用範例(對象)才有屬性和要領,原始範例是沒有屬性和要領的。
(2)然則我們也能常常看到有下面如許的寫法。
(3)我們運用 toString() 要領,將 num 這個數值範例轉換成了字符串範例,云云我們用 原始範例 num 挪用了 toString() 要領,那末是否是原始範例也能挪用要領呢?答案是否認的。依然只要對象才具有屬性和要領。
(4)【疑問】為何 num 挪用了 toString() 卻沒有報錯呢?這就須要我們相識包裝對象的觀點了。
三、包裝對象的觀點
(1)在JavaScript中,“統統皆對象”,包含三種原始範例的值(數值、字符串、布爾值),在肯定條件下,也會自動轉為對象,也就是原始範例的“包裝對象”。
(2)包裝對象是特別的援用範例。每當讀取数字、字符串和布爾值的屬性或要領時,建立的 暫時對象 稱做包裝對象。
四、包裝對象
4.1 組織函數
(1)為了便於援用字符串的屬性和要領,JavaScript將字符串值經由過程挪用 new String() 的體式格局 轉換成對象,這個對象繼續了字符串的屬性和要領,並被用來處置懲罰屬性和要領的援用。數值和布爾值也是云云。
(2)雖然包裝對象看上去和本來的值如出一轍,显示出來的也是如出一轍,但他們的 範例 已變成 object !
(3)【注重】包裝對象和原始值用 === 比較會返回 false。
4.2 數據範例轉換
(1)Number、String 和 Boolean,假如不作為組織函數挪用(即挪用時不加 new);此時,Number()、Boolean() 和 String() 被當作一般函數,把任何範例的數據轉換為 number、boolean和string範例(注重不是其包裝範例)。
4.3 總結
(1)這三個包裝對象作為 組織函數 運用(帶有 new)時,能夠將 原始範例的值轉為對象;
(2)作為 一般函數 運用時(不帶有 new),能夠將恣意範例的值,轉為原始範例的值。
五、包裝對象的燒毀
(1)【注重】一旦包裝對象的屬性或要領的援用完畢,這個新建立的對象就會燒毀。
(2)【申明】在上面的例子中,代碼第二行 name 屬性賦值時,包裝對象就會上台,建立一個 str 對應的暫時對象,固然,這行代碼實行完成,這個對象也就被燒毀。然後在第三行則會建立一個新的包裝對象,這個對象固然沒有 name 屬性,所以輸出的是 undefined。
六、包裝對象的目標
6.1 涵蓋一切值
(1)包裝對象的最大目標,首先是使得 JavaScript 的對象涵蓋一切的值。
6.2 輕易挪用要領
(1)其次使得原始範例的值能夠輕易地挪用某些要領。
參考文章
包裝對象 — JavaScript 規範參考教程(alpha)
javascript範例體系——包裝對象 小火柴的藍色抱負