亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談JavaScript中的string擁有方法的原因

2019-11-20 11:39:38
字體:
來源:轉載
供稿:網友

引子

我們都知道,JavaScript數據類型分兩大類,基本類型(或者稱原始類型)和引用類型。

基本類型的值是保存在棧內存中的簡單數據段,它們是按值訪問的。JS中有五種基本類型:Undefined、Null、Boolean、Number和String。

引用類型的值是保存在堆內存中的對象,它的值是按引用訪問的。引用類型主要有Object、Array、Function、RegExp、Date。

對象是擁有屬性和方法的,所以我們看到下面這段代碼一點也不奇怪.

var favs=['雞蛋','蓮蓬'];favs.push('秋葵');console.log(favs);//["雞蛋", "蓮蓬", "秋葵"]console.log(favs.length);//3

Array是引用類型,所以它自然可以擁有屬性(length)和方法(push),這天經地義地就像夏天一定要吃冰淇淋一樣。但是,再看下面的代碼,仔細想想,這這這,合法嗎?

var realMessage="Said I love you but I lied";var myMessage=realMessage.substring(5,15);console.log(myMessage); //"I love you"

有一個心碎的女紙任性地對一個用來分手的字符串任性地執行了“substring”方法,然后開心地看著剪輯版睡過去了??墒强墒强墒?,不是說string是基本類型嗎,為什么它可以擁有方法??還有沒有王法啊青天大老爺!

其實,這一切,都是因為有個叫“基本包裝類型”的東東。這個基本包裝類型特別耿直,是真正的“事了拂衣去,深藏功與名”!

基本包裝類型

除了一開始提到的Object、Array等引用類型,JavaScript還為我們提供了三種特殊的引用類型:String、Number和Boolean,方便我們操作對應的基本類型。

繼續看上面的剪輯字符串的例子,有沒有注意到,盡管使用了substring方法,realMessage本身的值是不會變的,調用這個方法只是返回了一個新的字符串。

這就是基本包裝類型的作用了。本來你是沒有方法的,但是你想用方法的時候,你盡管調,對應的基本包裝類型有這個方法就行。例如上面的substring方法,string這個基本類型是不可能有這個方法的,但是String這個包裝類型有啊,它會吭吭哧哧地把這個方法執行完把結果返回。在執行到:

realMessage.substring(5,15)

這行代碼時,發生了很多事。

首先,它會從內存中讀取realMessage的值。當處于這種讀取模式下的時候,后臺就開始干活了。JS高程是這樣描述后臺完成的這些動作的:

1.創建String類型的一個實例;
2.在實例上調用指定的方法;
3.銷毀這個實例

上面的例子可以用這樣的代碼來說明:

var _realMessage=new String("Said I love you but I lied");var myMessage=_realMessage.substring(5,15);_realMessgae=null; //方法調用后即銷毀

所以,這樣我們就明白了,并不是基本類型string執行了自身方法,而是后臺為它創建了一個對應的基本包裝類型String,它根據基本類型的值實例化出了一個實例,讓這個實例去調用指定方法,最后銷毀自己,感天動地有木有。

注意最后一步基本包裝類型“會銷毀”的特性,這決定了我們不能為基本類型值添加自定義屬性和方法。

var me="sunjing";me.age=18;console.log(me.age);//undefined

我給“me“這個字符串添加了age屬性,值設為美好的18歲,然并卵,再次訪問時,這個屬性已經渺無蹤跡了。這是因為:

執行到第二行代碼屬性賦值時,后臺創建了一個基本包裝類型的實例,這個age屬性確實掛到實例上去了,但是緊跟著,這個實例就被銷毀了。執行到第三行時,又重新創建了新的基本包裝類型的實例,自然是沒有age屬性的。

顯示使用基本包裝類型

除了在字符串處于讀取模式下,后臺會幫我們創建基本包裝類型實例時,我們自己也可以顯示地創建。

var str=new String("hello");var str2=str.toUpperCase();console.log(str2);//"HELLO:

這樣與后臺幫我們創建時變量中保存的東西是不同的。

var str1=new String("hello");var str2="hello";typeof str1 //"object"typeof str2 //"string"

總結

多虧了有基本包裝類型,我們操作string、boolean、number這三種基本類型更方便了。每當讀取這三種基本類型值時,后臺會創建對應的包裝類型實例,這個實例會調用指定方法,調用完會被銷毀。這種短暫的生命周期決定了我們不能為基本類型添加自定義的屬性和方法。

我們再來看下javascript中String類的subString()方法和slice()方法

最近在看《Javascript高級程序設計》一書,在書中發現一些以前沒有接觸過的且比較實用的技巧和知識點,想通過博客記錄一下,以加深記憶。

在該書2.8.4節中講到String類中的subString()方法和slice()方法,其用法和返回結果都基本相同,如下示例:

var strObj = new String("hello world");alert(strObj.slice(3));      // 輸出結果:"ol world"alert(strObj.subString(3));    // 輸出結果:"ol world"alert(strObj.slice(3, 7));    // 輸出結果:"lo w"alert(strObj.subString(3,7));   // 輸出結果:"lo w"

由以上代碼的輸出結果可已看出,slice()方法和subString()方調用方法法和輸出結果完全一樣,這兩種方法返回的都是要處理的字符串的子串,都接受一個或兩個參數,第一個參數是要獲取的子串的起始位置,第二個參數是要獲取子串的終止位置,如果第二個參數省略終止位置就默認為字符串的長度,且兩個方法都不改變String對象自身的值。

為什么有兩個功能完全相同的方法呢?事實上,這兩個方法并不完全相同,不過只在參數為負值時,他們處理參數的方式稍有不同。

對于負數參數,slice()方法會用字符串的長度加上參數,subString()方法將其作為0處理,例如:

var strObj = new String("hello world");alert(strObj.slice(-3));      // 輸出結果:"rld"alert(strObj.subString(-3));    // 輸出結果:"hello world"alert(strObj.slice(3,-4));     // 輸出結果:"lo w"alert(strObj.subString(3,-4))   // 輸出結果:"hel"

這樣既可看到slice()和subString()方法的主要不同。當只有參數-3時,slice()返回"rld",subString()則返回"hello world"。這是因為對于字符串"hello world",slice(-3)將被轉換成slice(8),而subString(-3)則轉化成subString(0)。同樣,使用3和-4差別也是很明顯。slice()方法將被轉換成slice(3,7),與前面的例子相同,返回"lo w"。而subString()方法則將這個兩個參數解釋為subString(0,3),實際上是:subString(0,3),因為subString()總是把較小的參數作為起始位,較大的數字最為終止位。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看国产成人av片| 91在线看www| 久久国产精品久久久久久| 成人妇女淫片aaaa视频| 国产在线观看精品一区二区三区| 在线成人中文字幕| 自拍偷拍亚洲一区| 亚洲午夜激情免费视频| 国产欧美在线视频| 欧美极品少妇xxxxⅹ免费视频| 国产偷国产偷亚洲清高网站| 欧美午夜久久久| 国产香蕉精品视频一区二区三区| 日韩欧美极品在线观看| 中文字幕在线看视频国产欧美| 8050国产精品久久久久久| 91精品久久久久久| 亚洲精选一区二区| 日本久久久a级免费| 国产精品流白浆视频| 欧美激情精品久久久| 久久精品成人一区二区三区| 亚洲欧美日韩高清| 亚洲国产精品嫩草影院久久| 国产在线精品成人一区二区三区| 欧美有码在线观看| 97av视频在线| 精品丝袜一区二区三区| 欧美午夜电影在线| 亚洲一区二区久久久| 亚洲人成网在线播放| 琪琪亚洲精品午夜在线| 欧美激情性做爰免费视频| 岛国视频午夜一区免费在线观看| 国产精品电影观看| 国产欧美一区二区三区久久人妖| 亚洲毛片在线观看.| 成人性生交xxxxx网站| 欧美与欧洲交xxxx免费观看| 亚洲欧美一区二区激情| 国产成人在线一区二区| 欧美www视频在线观看| 欧美一级黑人aaaaaaa做受| 欧美激情在线观看| 日韩三级成人av网| 日韩中文字幕第一页| 亚洲国产精品悠悠久久琪琪| 国产一区二区三区在线观看网站| 成人免费看吃奶视频网站| 青草成人免费视频| 亚洲四色影视在线观看| 亚洲国产又黄又爽女人高潮的| 国产精品偷伦一区二区| 91网站在线免费观看| 亚洲区bt下载| 成人激情视频免费在线| 国产精品美女久久久免费| 欧美日本在线视频中文字字幕| 伊人一区二区三区久久精品| 欧美日韩爱爱视频| 日本视频久久久| 91网在线免费观看| 激情成人在线视频| 国产在线播放不卡| 亚洲娇小xxxx欧美娇小| 日本在线观看天堂男亚洲| 欧美视频在线视频| 亚洲天堂av电影| 国模吧一区二区| 97视频在线观看免费| 亚洲激情小视频| 欧美丝袜一区二区| 国产精品福利网站| 欧美性xxxx| 欧美性资源免费| 2019日本中文字幕| 精品毛片网大全| 亚洲激情中文字幕| 国产丝袜精品视频| 欧美亚洲第一区| 91精品久久久久久久久中文字幕| 国产91精品在线播放| 日韩精品高清视频| 一本久久综合亚洲鲁鲁| 成人福利网站在线观看| 欧美高清videos高潮hd| 最近2019中文字幕第三页视频| 中文字幕亚洲字幕| 91精品国产沙发| 国产中文字幕亚洲| 日韩av片电影专区| 黄色精品一区二区| 精品国产拍在线观看| 成人xvideos免费视频| 中文字幕亚洲专区| 精品日本美女福利在线观看| 亚洲人成电影网站| 欧美一区二三区| 亚洲永久免费观看| xxxx性欧美| 亚洲国产精品电影在线观看| 国产精品福利无圣光在线一区| 亚洲激情在线观看视频免费| 色婷婷**av毛片一区| 日韩免费精品视频| 色综久久综合桃花网| 国产激情综合五月久久| 久久综合色88| 国产精品女人久久久久久| 欧美激情视频网址| 97精品欧美一区二区三区| 欧美一区第一页| 国产精品日韩欧美| 日韩精品在线免费观看| 亚洲天堂av在线免费| 国产在线拍偷自揄拍精品| 国产精品入口夜色视频大尺度| 亚洲第一级黄色片| 久久精品国产清自在天天线| 亚洲第一视频在线观看| 中文字幕亚洲综合| 69久久夜色精品国产69乱青草| 国产999精品久久久| 成人黄色影片在线| 色综合久久悠悠| 久久久久久久网站| 国产v综合ⅴ日韩v欧美大片| 亚洲国产一区自拍| 日韩av色综合| 亚洲一区亚洲二区亚洲三区| 国产一区深夜福利| 亚洲高清一二三区| 国产精品久久久久免费a∨大胸| 国产精品一区二区久久精品| 91av在线国产| 亚洲人在线观看| 亚洲欧美日韩精品| 69影院欧美专区视频| 热久久99这里有精品| 久久久久久久97| 亚洲一级黄色av| 2024亚洲男人天堂| 2021国产精品视频| 精品亚洲永久免费精品| 国产精品视频久久| 欧美激情视频网| 亚洲丝袜在线视频| 欧美日韩在线另类| 欧美日韩国产999| 综合激情国产一区| 色老头一区二区三区在线观看| 日韩精品极品在线观看播放免费视频| 上原亚衣av一区二区三区| 国产91成人在在线播放| 中文字幕在线看视频国产欧美| 成人97在线观看视频| 国产精品国语对白| 精品国产一区二区三区四区在线观看| 亚洲国产成人精品久久久国产成人一区| 国产91在线播放精品91| 青青草成人在线| 国产欧美久久一区二区| 国产精品第3页| 欧美在线视频免费观看|