字符串(補(bǔ))
其實,我以前一直都認(rèn)為語言中「萬物皆對象」這一理念,以至于我在「JavaScript」學(xué)習(xí)中也這樣看。
回想理念的起點應(yīng)該是大一的一次講座,那是一個Java學(xué)習(xí)的講座。可當(dāng)自己學(xué)習(xí)前端的過程中,對
「對象」等概念幾乎都沒有了。今天,突然悟出來一點道理。就是下面這兩句話(僅涉及JavaScript中)。
- 只有對象才有屬性
- 字符串不是對象
因為身邊的好友多少會有一些「JavaScript」的基礎(chǔ),所以在這里我就不解釋什么是「對象」或「字符串」。
此時,回過來看看這兩句話,第一句很好理解,因為我們平時就是這樣寫的。

當(dāng)時第二句話,就一定有問題了。
請你回想10秒。你就會發(fā)現(xiàn),我們經(jīng)常會寫'aaa'.length、'aaa'.substring(x,x)....可能你覺得很平常,但是當(dāng)你看到下面的顯示的時候,我反正之前一直糾結(jié)的。

當(dāng)然還有使用構(gòu)造函數(shù)的方法創(chuàng)建字符串對象(請注意我的措詞)。當(dāng)然這樣也不能放棄我們來驗證字符串不是對象的理由。因為第一句話
一定是對的。如果是對象就可以做到設(shè)置新屬性訪問屬性,如下圖:

那我來試試字符串的,如下圖:

發(fā)現(xiàn)我們只能設(shè)置屬性,但是不能訪問設(shè)置過的屬性??墒蔷陀羞@么一個疑問了,為什么可以設(shè)置呢?我們的想法是,瀏覽器在解析到字符串
.的時候,默默的給我們創(chuàng)建了一個值與原來的字符串相同的字符串對象(請多看幾遍這句話)。
var a = 'baiji';
a.name = 'xiaoming' // 'xiaoming'
// 偽代碼顯示
// temp = new String("baiji");
// a.name ==> temp.name
但是臨時對象(temp)返回結(jié)果之后,瀏覽器銷毀了其值,所以當(dāng)我們訪問a.name的時候只會得到undefined。
這樣一來確實解決了為什么字符串使用方法的時候都要用另一個變量接住,而不是跟數(shù)組一樣的對象改變其本身。
總結(jié)
- 只有對象才有屬性
- 字符串不是對象
- 「萬物皆對象」有待商議
聽說這個是「JavaScript Magic」,我上網(wǎng)找到了一篇類似的解釋,如果你有更好的解釋或者發(fā)現(xiàn)自己發(fā)郵件給我。
本文章著作權(quán)歸白小霽所有,轉(zhuǎn)載須說明來源