为什么基本类型可以调用方法——以字符串为例
引用類型中的基本包裝類型
對(duì)于str.substring(2)這種方法我們經(jīng)常使用,
var str = "hello world";
var s1 = str.substring(2);?
可是str明明是個(gè)字符串(基本類型),又不是對(duì)象,為什么可以調(diào)用方法呢。。。。
解釋說(shuō)明:
當(dāng)我們用str這個(gè)字符串調(diào)用方法時(shí),后臺(tái)已經(jīng)為我們做了一系列操作,讓我們來(lái)看看究竟都做了哪些操作呢
當(dāng)?shù)诙写a訪問(wèn)str時(shí),訪問(wèn)過(guò)程處于一種讀取模式(即從內(nèi)存中讀取這個(gè)字符串的值),而在讀取模式下訪問(wèn)字符串時(shí),后臺(tái)會(huì)做如下處理
a.創(chuàng)建String類型的一個(gè)實(shí)例
b.在實(shí)例上調(diào)用指定的方法
c.銷毀這個(gè)實(shí)例
針對(duì)此處代碼,可以想象是后臺(tái)進(jìn)行了如下處理
var str = new String("hello world");
var s1 = str.substring(2);
str = null;?
到此就解釋了為什么字符串這個(gè)基本類型可以調(diào)用方法了。
———————————————分割線——————————————————
接下來(lái)我們了解下基本包裝類型,即用到的new String("hello world")
為了便于操作基本類型,ECMAScript提供了三個(gè)特殊的引用類型:Boolean、Number和String。
實(shí)際上,每當(dāng)讀取一個(gè)基本類型的值時(shí),后臺(tái)就會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類型的對(duì)象,就如上面的例子所示。
引用類型和基本包裝類型的區(qū)別
主要是對(duì)象生存周期的不同
a.使用new創(chuàng)建的引用類型的實(shí)例,在執(zhí)行流離開(kāi)當(dāng)前作用域之前都一直保存在內(nèi)存中,
b.自動(dòng)創(chuàng)建的包裝類型的對(duì)象只存在于一行代碼的執(zhí)行瞬間,然后被立即銷毀
舉個(gè)栗子
var str = “hello world”;
str.color = "red";
alert(str.color);? //undefined
第二行代碼創(chuàng)建的String對(duì)象在執(zhí)行第三行代碼時(shí)已經(jīng)被銷毀,第三行代碼又創(chuàng)建了自己的String對(duì)象,而該對(duì)象沒(méi)有color屬性。
當(dāng)然可以顯示的調(diào)用String、Boolean和Number來(lái)創(chuàng)建基本包裝類型的對(duì)象,但是再不是絕對(duì)必要的情況下不建議使用,這樣很容易讓人分不清楚是在處理基本類型還是引用類型的值。
Object構(gòu)造函數(shù)也會(huì)像工廠方法一樣,根據(jù)傳入值的基本類型返回相應(yīng)基本包裝類型的實(shí)例。例如
var obj = new Object("hello world");
alert(obj instanceof String ) ;? ?//true
需要注意的是:
使用new 調(diào)用基本包裝類型的構(gòu)造函數(shù),與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的
var value = “25”;
var number = Number(value);? ?//轉(zhuǎn)型函數(shù)
alert(typeof number);? ?// "number"
var obj = new Number(value);
alert( typeof obj );? ? // "object"
此處number中保存的是基本類型的值25
obj中保存的是Number的實(shí)例
?
——參考《javascript 高級(jí)程序設(shè)計(jì)》第五章的第六節(jié)的基本包裝類型
?
轉(zhuǎn)載于:https://www.cnblogs.com/xue6666/p/9174995.html
總結(jié)
以上是生活随笔為你收集整理的为什么基本类型可以调用方法——以字符串为例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: solr创建core
- 下一篇: 在做mvc时遇到的一些问题