javascript中的對象類型分爲內置類型和對象類型,其中內置類型包括sting number boolean null undefined五種;對象類型包括Array Function regExp Date 等等,統稱爲Object類型。咱們知道在一個對象中包含一系列屬性名/屬性值的集合,能夠經過"."來訪問對象的屬性或方法,如:javascript
window.onload=function(){//可執行代碼}
但咱們經常能夠看到這樣的代碼:java
var str="hello world"; str.split(" "); // ["hello","world"]
上段代碼中,str爲一個字符串,是存在棧中的一個值,並不屬於對象,可是爲何str能夠調用split方法呢?這就要用到包裝對象的概念。當要操做字符串、數字、布爾值的屬性時,js會在內存中自動建立一個對象,用來對內置類型進行包裝,使內置類型暫時擁有普通對象功能,能夠存取屬性,一旦引用結束,包裝對象自動銷燬。以下面代碼:code
var str="123456"; str.a=7; //爲字符串添加一個屬性a,並賦值爲7 console.log(str.a) //undefined
上面的代碼咱們能夠分解爲:對象
var str="123456"; var newStr=new String("str");//建立包裝對象 newStr.a=7; //爲字符串添加一個屬性a,並賦值爲7 console.log(newStr.a);//7 newStr=null;//釋放包裝對象 console.log(str.a) //undefined
自此咱們不難理解爲何str.a的值爲undefied;ip