關(guān)于String.prototype

做項目的時候發(fā)現(xiàn)一個問題,我們項目里頭對js的String的原型對象進(jìn)行了擴(kuò)展

比如

String.prototype.formatStringRN = function ()
{
    var cd = this;
    if (cd != "")
    {
        cd = cd.replaceAll('\r\n', '<br//>').replaceAll('\n', '<br//>').replaceAll('\r', '<br//>');
    }
    return cd;
};

這是原來項目里的代碼,作用是將字符串中的 "\r\n" 全部替換成 "<br//>"
這里有一個平時都沒仔細(xì)想過的問題
就是方法內(nèi)部對this進(jìn)行了判斷,如果這玩意兒等于空串的時候直接返回 this
但是js內(nèi)部的處理比較困擾,這里的this,其實已經(jīng)不是一個簡單的 "str"
看看我剛在谷歌的控制臺里做寫的一段代碼就明白了
這里的this,其實已經(jīng)變成了一個類似new String 得到的對象,至于這個對象是怎么得到的,我就不瞎說了(應(yīng)該說這個東西比較復(fù)雜,如果真展開了,又是另外一篇文了),反正需要明白的是,這個對象其實跟普通的直接寫的字面量是不一樣的,了解javascript中 == 與 === 區(qū)別的應(yīng)該明白

圖片,實驗結(jié)果

然后,這樣有什么問題呢?
其實如果你拿它當(dāng)字符串用,也沒什么大問題,當(dāng)然區(qū)別在于

"aa" === "aa" => true
new String("aa")  === "aa" => false

但是
如果你這樣做

if(""){
  //do
}

do是不會被執(zhí)行到的

if(new String("")){
  //do    
}

這個do是被執(zhí)行到的
如下

new String("")

所以, 不要 直接返回this

最后說一下怎么解決這個問題
其實我本來想的是返回一個類似 this.value 這樣的東西,但是貌似沒有這個屬性或者類似的方法
所以這個方法就變成了

String.prototype.formatStringRN = function ()
{
    var cd = this;
    if (cd != "")
    {
        cd = cd.replaceAll('\r\n', '<br//>').replaceAll('\n', '<br//>').replaceAll('\r', '<br//>');
    }
    return String(cd);
};

注意返回值,用"String"處理了一下,這樣得到的就是一個普通的字面量值了
當(dāng)然,其實也可以在一進(jìn)來的時候直接處理 this
變成這個樣子

String.prototype.formatStringRN = function ()
{
    var cd = String( this);
    if (cd != "")
    {
        cd = cd.replaceAll('\r\n', '<br//>').replaceAll('\n', '<br//>').replaceAll('\r', '<br//>');
    }
    return (cd);
};

最后說點(diǎn)題外話
寫js程序的時候

  1. 無論什么情況,不要使用 new String 這樣的代碼(跟我一樣無聊測試特性的除外)
  2. 無論什么情況,判斷是否相等請使用 === 而不要使用 ==

以上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評論 0 4
  • “今天是情人劫,不是情人節(jié),你看,朋友圈,都沒眼看了?!眲倓偸俚男∶装脨赖恼f,可憐我們一群單身狗在九點(diǎn)的美好時光...
    筱念涼閱讀 400評論 4 2
  • 2016已經(jīng)開始了一周,考研結(jié)束半個月,現(xiàn)在不用去自習(xí)室,不用在想是看書還是看電視,有足夠的時間看電視,但看著那...
    f62efe44cb6e閱讀 235評論 0 0
  • 文/山園小梅 圖/來自網(wǎng)絡(luò) “看病難,看病煩”問題由來已久,其原因錯綜復(fù)雜,醫(yī)院里人頭涌動的現(xiàn)象目測也不是一朝一...
    梅子的山園閱讀 2,762評論 37 109

友情鏈接更多精彩內(nèi)容