(1)最新的 ECMAScript 標準定義了 7 種 數據類型:javascript
6種 原型類型:html
以及 Object 對象java
(2)這7種數據類型中,對象爲「引用類型」,其餘六種爲「原始類型」(或叫「基本類型」)。web
(1)按原始類型和引用類型的定義來講,只有引用類型(對象)纔有屬性和方法,原始類型是沒有屬性和方法的。segmentfault
(2)可是咱們也能常常看到有下面這樣的寫法。app
(3)咱們使用 toString() 方法,將 num 這個數值類型轉換成了字符串類型,如此咱們用 原始類型 num 調用了 toString() 方法,那麼是否是原始類型也能調用方法呢?答案是否認的。仍然只有對象才能擁有屬性和方法。函數
(4)【疑問】爲何 num 調用了 toString() 卻沒有報錯呢?這就須要咱們瞭解包裝對象的概念了。spa
(1)在JavaScript中,「一切皆對象」,包括三種原始類型的值(數值、字符串、布爾值),在必定條件下,也會自動轉爲對象,也就是原始類型的「包裝對象」。htm
(2)包裝對象是特殊的引用類型。每當讀取數字、字符串和布爾值的屬性或方法時,建立的 臨時對象 稱作包裝對象。對象
(1)爲了便於引用字符串的屬性和方法,JavaScript將字符串值經過調用 new String() 的方式 轉換成對象,這個對象繼承了字符串的屬性和方法,並被用來處理屬性和方法的引用。數值和布爾值也是如此。
(2)雖然包裝對象看上去和原來的值如出一轍,顯示出來的也是如出一轍,但他們的 類型 已經變爲 object !
(3)【注意】包裝對象和原始值用 === 比較會返回 false。
(1)Number、String 和 Boolean,若是不做爲構造函數調用(即調用時不加 new);此時,Number()、Boolean() 和 String() 被當作普通函數,把任何類型的數據轉換爲 number、boolean和string類型(注意不是其包裝類型)。
(1)這三個包裝對象做爲 構造函數 使用(帶有 new)時,能夠將 原始類型的值轉爲對象;
(2)做爲 普通函數 使用時(不帶有 new),能夠將任意類型的值,轉爲原始類型的值。
(1)【注意】一旦包裝對象的屬性或方法的引用結束,這個新建立的對象就會銷燬。
(2)【說明】在上面的例子中,代碼第二行 name 屬性賦值時,包裝對象就會登場,建立一個 str 對應的臨時對象,固然,這行代碼執行完成,這個對象也就被銷燬。而後在第三行則會建立一個新的包裝對象,這個對象固然沒有 name 屬性,因此輸出的是 undefined。
(1)包裝對象的最大目的,首先是使得 JavaScript 的對象涵蓋全部的值。
(1)其次使得原始類型的值能夠方便地調用某些方法。
參考文章
包裝對象 -- JavaScript 標準參考教程(alpha)
javascript類型系統——包裝對象 小火柴的藍色理想