
JavaScript對(duì)象是一種復(fù)合值:它是屬性和已命名值的集合。通過(guò)"."符號(hào)來(lái)引用屬性值。當(dāng)屬性值是一個(gè)函數(shù)時(shí),稱為方法。
?、僖欢文愠S玫珔s未必明白其真正底層原理的代碼:
- var s = "hello world!";
- var word = s.substring(s.indexOf(" ")+1,s.length);
如前面所說(shuō),這里變量s只是一個(gè)字符串原始類型,它怎么會(huì)有屬性(s.length)和方法(s.indexOf()、 s.substring())呢?沒錯(cuò),這正跟我們正要介紹的包裝對(duì)象有關(guān)。原因是:只要引用了字符串s的屬性,JavaScript就會(huì)將字符串值通過(guò)調(diào)用new String(s)的方式轉(zhuǎn)換成對(duì)象,這個(gè)對(duì)象繼承了字符串(String)對(duì)象的方法,并被用來(lái)處理屬性的引用。一旦屬性引用結(jié)束,這個(gè)新創(chuàng)建的對(duì)象就會(huì)被銷毀。
同字符串一樣,數(shù)字和布爾值也有各自的方法:通過(guò)Number()和Boolean()構(gòu)造函數(shù)創(chuàng)建一個(gè)臨時(shí)對(duì)象。存取字符串、數(shù)字或布爾值的屬性時(shí)創(chuàng)建的臨時(shí)對(duì)象就是包裝對(duì)象。5種原始類型中的剩余兩種null和undefined沒有包裝對(duì)象:訪問(wèn)它們的屬性會(huì)造成一個(gè)類型錯(cuò)誤(Uncaught TypeError)。明白了上面的代碼,那么再看如下代碼:
- var s = "test";
- s.len = 4;//給它設(shè)置一個(gè)屬性
- var t = s.len;
不認(rèn)真的同學(xué)這里就會(huì)認(rèn)為最后t就是等于4了。難道最后t不等于4嗎?是的,最后t的值是undefined。想知道為什么請(qǐng)看繼續(xù)看解析:原來(lái)以這里第二行代碼只是創(chuàng)建了一個(gè)臨時(shí)字符串對(duì)象,并給len屬性賦值為4,隨即銷毀這個(gè)對(duì)象。而第三行又是通過(guò)原始字符串s創(chuàng)建一個(gè)新字符串對(duì)象(這個(gè)不是第二行代碼創(chuàng)建的對(duì)象,第二行代碼創(chuàng)建的對(duì)象已經(jīng)被銷毀了)并嘗試讀取其len屬相,這個(gè)屬性自然不存在,因此表達(dá)式的結(jié)果為undefined。這段代碼說(shuō)明了在讀取字符串、數(shù)字和布爾值的屬性值或方法(實(shí)際上是它們對(duì)應(yīng)包裝對(duì)象的屬性值或方法)表現(xiàn)的像對(duì)象一樣。但如果你試圖給屬性賦值,則會(huì)忽略這個(gè)操作:修改只是發(fā)生在臨時(shí)對(duì)象身上,而這個(gè)臨時(shí)對(duì)象并不會(huì)繼續(xù)保留下來(lái)。
注意:可通過(guò)String(),Number(),Boolean()構(gòu)造函數(shù)來(lái)顯示創(chuàng)建包裝對(duì)象:
- var s = "test",n=1,b=true;//一個(gè)字符串、數(shù)字和布爾值
- var S = new String(s);//一個(gè)字符串對(duì)象
- var N = new Number(n);//一個(gè)數(shù)值對(duì)象
- var B = new Boolean(b);//一個(gè)布爾對(duì)象
JavaScript會(huì)在必要時(shí)將包裝對(duì)象轉(zhuǎn)換成原始值,因此上段代碼中的對(duì)象S、N和B常常但不總是表現(xiàn)的和值s、n和b一樣。"=="等于運(yùn)算符將原始值和其包裝對(duì)象視為相等,但“===”全等運(yùn)算將它們視為不等。通過(guò)typeof運(yùn)算符也可以看到原始值和其包裝對(duì)象的不同:
?、賢ypeof(s); ->"string"
typeof(S); ->"object"
②typeof(n); ->"string"
typeof(N); ->"object"
?、踭ypeof(b); ->"string"
typeof(B); ->"object"
本文作者:Craftsman_Gao
原文鏈接:http://www.cnblogs.com/craftsman ... /07/08/4631501.html
本站中的所有文章僅以學(xué)習(xí)和交流為目的,如果我們的工作有侵犯到您的權(quán)益,請(qǐng)及時(shí)聯(lián)系站長(zhǎng)QQ:2601929995,我們會(huì)在第一時(shí)間進(jìn)行處理!
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。