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