JavaScript中,string、number、boolean均為primitive基本類型,也即字符串、數值、布爾值並不是以對象的形式而存在的。不過,由於需要對這三種primitive類型值進行操作,因此JavaScript會自動封裝這三種類型的值,使其作為對象而擁有屬性與方法。以string為例,這種封裝過程如下:
1.當JavaScript遇到對string值進行屬性訪問或者方法調用時,會調用new String(字符串值)自動將該string封裝成一個String對象。
2.JavaScript會訪問這個新創建的對象的屬性或者方法,並返回相應的結果。
3.屬性訪問或者方法調用結束後,JavaScript將立即銷毀這個新創建的對象。
以下面的代碼為例,對JavaScript自動創建的String對象進行屬性寫入操作沒有任何意義,因為這個創建出來的對象在寫入語句結束後就不復存在了:
復制代碼 代碼如下:
var s = "test";
s.length = 9;
console.log(s.length);//still 4
s.newVariable = 9;
console.log(s.newVariable);//undefined
console.log(s === "test");//true
值得注意的是,上述代碼中的s變量所表示的永遠是primitive的字符串,JavaScript所自動創建的字符串對象存在於執行s.length或者s.newVariable操作的過程中。這可以從以上實驗的最後一行代碼中得到驗證。
除了對Primitive值進行自動封裝,開發人員也可以選擇手動進行相應的過程。與自動封裝不同的是,手動封裝所得到的對象並不會被立即銷毀,因此針對手動封裝的對象所采取的屬性寫入操作是有意義的:
復制代碼 代碼如下:
var t = new String("test");
t.length = 9;
console.log(t.length);//still 4, as length attribute is read only
t.newVariable = 9;
console.log(t.newVariable);//9
console.log(t == "test");//true
console.log(t === "test");//false