關于String.prototype

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

比如

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//>"
這里有一個平時都沒仔細想過的問題
就是方法內(nèi)部對this進行了判斷熏矿,如果這玩意兒等于空串的時候直接返回 this
但是js內(nèi)部的處理比較困擾,這里的this离钝,其實已經(jīng)不是一個簡單的 "str"
看看我剛在谷歌的控制臺里做寫的一段代碼就明白了
這里的this票编,其實已經(jīng)變成了一個類似new String 得到的對象,至于這個對象是怎么得到的卵渴,我就不瞎說了(應該說這個東西比較復雜慧域,如果真展開了,又是另外一篇文了)浪读,反正需要明白的是昔榴,這個對象其實跟普通的直接寫的字面量是不一樣的,了解javascript中 == 與 === 區(qū)別的應該明白

圖片碘橘,實驗結(jié)果

然后论泛,這樣有什么問題呢?
其實如果你拿它當字符串用蛹屿,也沒什么大問題屁奏,當然區(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"處理了一下,這樣得到的就是一個普通的字面量值了
當然犹撒,其實也可以在一進來的時候直接處理 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);
};

最后說點題外話
寫js程序的時候

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

以上

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末识颊,一起剝皮案震驚了整個濱河市诚镰,隨后出現(xiàn)的幾起案子奕坟,更是在濱河造成了極大的恐慌,老刑警劉巖清笨,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件月杉,死亡現(xiàn)場離奇詭異,居然都是意外死亡抠艾,警方通過查閱死者的電腦和手機苛萎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來检号,“玉大人腌歉,你說我怎么就攤上這事∑肟粒” “怎么了翘盖?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凹蜂。 經(jīng)常有香客問我馍驯,道長,這世上最難降的妖魔是什么炊甲? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任泥彤,我火速辦了婚禮,結(jié)果婚禮上卿啡,老公的妹妹穿的比我還像新娘吟吝。我一直安慰自己,他們只是感情好颈娜,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布剑逃。 她就那樣靜靜地躺著,像睡著了一般官辽。 火紅的嫁衣襯著肌膚如雪蛹磺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天同仆,我揣著相機與錄音萤捆,去河邊找鬼。 笑死俗批,一個胖子當著我的面吹牛俗或,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岁忘,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辛慰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了干像?” 一聲冷哼從身側(cè)響起帅腌,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤驰弄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后速客,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戚篙,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年挽封,在試婚紗的時候發(fā)現(xiàn)自己被綠了已球。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臣镣。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辅愿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忆某,到底是詐尸還是另有隱情点待,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布弃舒,位于F島的核電站癞埠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聋呢。R本人自食惡果不足惜苗踪,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望削锰。 院中可真熱鬧通铲,春花似錦、人聲如沸器贩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛹稍。三九已至吧黄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唆姐,已是汗流浹背拗慨。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奉芦,地道東北人赵抢。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像仗阅,于是被迫代替她去往敵國和親昌讲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法减噪,類相關的語法短绸,內(nèi)部類的語法车吹,繼承相關的語法,異常的語法醋闭,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,233評論 0 4
  • “今天是情人劫窄驹,不是情人節(jié),你看证逻,朋友圈乐埠,都沒眼看了∏羝螅”剛剛失戀的小米懊惱的說丈咐,可憐我們一群單身狗在九點的美好時光...
    筱念涼閱讀 316評論 4 2
  • 2016已經(jīng)開始了一周,考研結(jié)束半個月龙宏,現(xiàn)在不用去自習室棵逊,不用在想是看書還是看電視,有足夠的時間看電視银酗,但看著那...
    f62efe44cb6e閱讀 180評論 0 0
  • 文/山園小梅 圖/來自網(wǎng)絡 “看病難辆影,看病煩”問題由來已久,其原因錯綜復雜黍特,醫(yī)院里人頭涌動的現(xiàn)象目測也不是一朝一...
    梅子的山園閱讀 2,628評論 37 109