在JAVAScript中一切皆對象,就是將所有的數(shù)據(jù)都看成是對象。于是,就有了字符串和字符串對象的問題。首先看看創(chuàng)建字符串的兩種寫法:
var str1='hello itsource.cn';
var str2=new String('hello itsource.cn');
很多人對于這兩種創(chuàng)建字符串的方式都感到很迷茫,不知道該寫哪一種,也不知道有什么區(qū)別。接下來把我研究的結(jié)果給大家整理出來。
第一,先看一下共同點(diǎn)
1. 兩種方式都能成功創(chuàng)建字符串,也能夠拿來使用或輸出。
2. 兩種方式創(chuàng)建的結(jié)果還是相等的。
3. 兩種方式創(chuàng)建的字符串都可以使用屬性和方法
第二,看一下不同的地方
雖然兩種方式都能創(chuàng)建出字符串,值也是相等的,并且都能夠使用屬性和方法。 但是也有一些不同的地方。
1. 兩種字符串的類型不相同
從兩個圖中可以看出, str1的類型是 string,即普通字符串。 而 str2的類型為object,是一個對象類型。 普通字符串是一個基本類型的數(shù)據(jù),存儲在內(nèi)存的棧里面,而對象是一個引用類型的數(shù)據(jù),存儲在內(nèi)存堆里面。所以兩種方式創(chuàng)建出的字符串?dāng)?shù)據(jù)類型不相同,內(nèi)存的存儲位置也不相同。
之前看到的兩個字符串相等使用的是值等于(==),而不是全等于(===),如果是全等于則兩個字符串不相等,因?yàn)樗鼈兊念愋筒幌嗤?/p>
要理解清楚為什么str2是對象類型,就必須了解JS的new關(guān)鍵詞,這里不詳細(xì)解釋啦。
2. 字符串對象可以使用自定義屬性和方法
運(yùn)行結(jié)果:
從結(jié)果可以看出,str1是基本類型的字符串,不能自定義屬性和方法。 而 str2是一個字符串對象,可以使用自定義的屬性和方法。
JS中基本字符串和字符串對象的區(qū)別我就給大家寫到這里了,只是說明一下主要的區(qū)別,以便于大家根據(jù)自己的情況使用,內(nèi)部運(yùn)行原理就不在這里詳細(xì)寫了。






