在另一篇文章 js的new運(yùn)算符詳解 提到過(guò)包裝對(duì)象,這里詳細(xì)解釋下既穆。
我們之前說(shuō)string准脂、number 和 boolean 這三個(gè)原始類型對(duì)應(yīng)的 new String()饿悬、new Number() 和 new Boolean() 被創(chuàng)建出來(lái)的特別被稱為 包裝對(duì)象刹枉。那么單獨(dú)的 String()叽唱、Number()和Boolean() 是當(dāng)做普通的類型轉(zhuǎn)換函數(shù)使用的。
例如下面 new String() 包裝對(duì)象的這個(gè)聲明:
var s='string';
var sobj=new String('string');
console.log(s==sobj);
console.log(s===sobj)
console.log(typeof s);
console.log(typeof sobj);
可以看到兩個(gè)變量的值是相等的所以第一個(gè) log 返回 true微宝,第二個(gè)全等運(yùn)算符判斷就返回了 false棺亭,看下兩個(gè)類型其實(shí)分別為 string 和 object。
那這里這里有奇怪的地方蟋软,既然變量 s 的類型是 string镶摘,為什么我們可以用 s.length 等這種對(duì)象屬性訪問(wèn)的方式去得到字符創(chuàng)長(zhǎng)度呢?
那是因?yàn)槲覀冊(cè)谑褂?s.length 這個(gè)屬性方法的時(shí)候 js 會(huì)自動(dòng) 先把 s 通過(guò) new String() 轉(zhuǎn)換成包裝對(duì)象岳守,待得到 length 這個(gè)屬性值的時(shí)候又會(huì)恢復(fù)原來(lái)的 string 類型凄敢,這個(gè)過(guò)程對(duì)我們不可見(jiàn),就這么理解就可以了湿痢。
同時(shí)這就解釋了當(dāng)我們嘗試給 string 類型的 s 添加屬性的時(shí)候不報(bào)錯(cuò)卻讀不到涝缝,因?yàn)閯?chuàng)建后又被還原了。一般來(lái)說(shuō)我們用不到 new String()譬重、new Number() 和 new Boolean()拒逮,這么了解就可以了。
感謝閱讀害幅,喜歡的話點(diǎn)個(gè)贊吧:)
更多內(nèi)容請(qǐng)關(guān)注后續(xù)文章消恍。。以现。