天天看點

javascript包裝對象

js對象是一種複合值:它是屬性或已命名值得集合。

參考以下代碼:

在該例子中,s是字元串,而字元串不是對象,但為何會有屬性呢?其實隻要引用了字元串s的屬性,js就會将字元串通過調用new string(s)的方式轉換為對象,該對象繼承了字元串的方法,并被用來處理屬性的引用;一旦屬性引用結束,這個新建立的對象就會被銷毀(在實作上并不一定建立或銷毀這個臨時對象,但整個過程看來是這樣)。

同字元串一樣,數字和布爾值也具有各自的方法:通過number()單核boolean()構造函數建立臨時對象,這些方法的調用都是來自于這個臨時對象;然而null和undefined沒有包裝對象:通路他們的屬性會造成類型錯誤。

比如以下代碼:

因為第2行建立臨時對象後,立即将其銷毀;第三行通過原始的字元串值建立一個新字元串對象,嘗試讀取其len屬性,自然不存在。這段代碼說明在讀取字元串、數字和布爾值的屬性值或方法時,表現的像對象一樣。但如果你試圖給其屬性指派,則會忽略這個操作:修改隻是發生在臨時對象上,而這個臨時對象并未繼續保留下來。

存取字元串、數字或布爾值的屬性時臨時建立臨時對象稱為包裝對象。

我們可以顯示建立一個字元串對象然後增添它的屬性,自然該屬性會一直保留下來:

js會在必要時将包裝對象轉換為原始值是以顯示建立的對象和其對應的原始值常常但不總是表現的一樣。==運算符将原始值和其包裝對象視為相等;但===全等運算符将他們視為不等;另外通過typeof運算符可以看到原始值和包裝對象的不同。

繼續閱讀