先看這樣一些測試程式碼,我們能從當中發現哪些問題:
var str=”likeke”;
str;//”likeke”
str.length;//6
str.age=22 ;
str.age;//undefined;
var mystr=new String(“likeke”);
mystr;//String {0: "l", 1: "i", 2: "k ", 3: "e", 4: "k", 5: "e", length: 6, [[PrimitiveValue]]: "likeke"}
mystr.length;//6
mystr.age=22 ;
mystr.age;//22
第一個問題:為什麼基本類型string可以存取到length屬性?
第二個問題:string的包裝類型可以存取到自訂的屬性,但基本類型的為什麼string卻訪問不到?
原因:1.當我們以物件的形式存取一個基本型別string的屬性或為其建立新屬性的時候,js引擎會將其轉換為對應的包裝型物件;
2.當我們增加一個自 2.當我們增加一個自 定義屬性之後,這個臨時物件會被立即銷毀。因此,再次存取此屬性時(也會再次轉換為其包裝類型)顯示為undefind 。
除了string之外,其它基本類型也是類似的原理,例如,(666).toString().length;//3