欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解JavaScript中為什么string可以擁有方法

 更新時間:2016年05月24日 08:47:47   投稿:jingxian  
下面小編就為大家?guī)硪黄钊肜斫釰avaScript中為什么string可以擁有方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

引子

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

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

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

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

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

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

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

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

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

基本包裝類型

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

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

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

realMessage.substring(5,15)這行代碼時,發(fā)生了很多事。

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

1.創(chuàng)建String類型的一個實例;

2.在實例上調(diào)用指定的方法;

3.銷毀這個實例

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

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

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

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

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

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

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

顯示使用基本包裝類型

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

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

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

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

總結(jié)

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

以上這篇深入理解JavaScript中為什么string可以擁有方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • js實現(xiàn)prototype擴展的方法(字符串,日期,數(shù)組擴展)

    js實現(xiàn)prototype擴展的方法(字符串,日期,數(shù)組擴展)

    這篇文章主要介紹了js實現(xiàn)prototype擴展的方法,實例分析了JavaScript針對字符串、日期、數(shù)組等的prototype擴展相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • js拖拽效果的原理及實現(xiàn)

    js拖拽效果的原理及實現(xiàn)

    這篇文章主要為大家詳細介紹了js拖拽效果的原理及實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • JavaScript中push(),join() 函數(shù) 實例詳解

    JavaScript中push(),join() 函數(shù) 實例詳解

    本文通過實例給大家介紹了JavaScript中push(),join() 的知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • js中判斷Object、Array、Function等引用類型對象是否相等

    js中判斷Object、Array、Function等引用類型對象是否相等

    項目中有時會需要對引用類型進行比較,如常見的object和array,我們知道,引用類型無法直接使用 == 或=== 取得期待結(jié)果,因此需要一個迭代的compare函數(shù)轉(zhuǎn)化成原始類型進行比較
    2012-08-08
  • javascript中使用未定義變量或值的情況分析

    javascript中使用未定義變量或值的情況分析

    這篇文章主要介紹了javascript中使用未定義變量或值的情況,較為詳細的分析了javascript中使用未定義值的情況,需要的朋友可以參考下
    2016-07-07
  • 基于JavaScript實現(xiàn)屏幕滾動效果

    基于JavaScript實現(xiàn)屏幕滾動效果

    這篇文章主要為大家詳細介紹了基于JavaScript實現(xiàn)屏幕滾動效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • JS的空值合并運算符(??)的使用

    JS的空值合并運算符(??)的使用

    空值合并運算符是一個邏輯運算符,當左側(cè)的操作數(shù)為null或undefined時,會返回右側(cè)操作數(shù),否則返回左側(cè)操作數(shù),本文就來詳細的介紹一下如何使用
    2023-12-12
  • 用Javascript來生成ftp腳本的小例子

    用Javascript來生成ftp腳本的小例子

    昨天閑著沒事,又因為工作需要,寫了一個腳本,用來做ftp。當然不是直接做ftp,而是產(chǎn)生一個ftp的腳本,供ftp命令使用。
    2013-07-07
  • 深入淺出JavaScript中base64編碼原理

    深入淺出JavaScript中base64編碼原理

    今天翻開舊項目發(fā)現(xiàn)挺多圖片相關(guān)的插件都是用?base64?來顯示圖片的。談到?base64,腦海遐想翩翩,思緒回蕩之下?base64?瑕瑜互見。這篇文章主要是記錄了工作中遇見的問題并加以總結(jié),如有不妥請指正
    2023-02-02
  • 使用TS來編寫express服務(wù)器的方法步驟

    使用TS來編寫express服務(wù)器的方法步驟

    這篇文章主要介紹了使用TS來編寫express服務(wù)器的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論