摘要:js開發過程中一些極易落入的陷阱,你中招了沒?
1、字串替換的古怪現象
(function() ());
如上,結果是什麼?
one or zero is one
zero or zero is one
你會驚訝的發現:結果不是想象中的'zero or zero is zero',這是因為string.prototype.replace方法預設只將第一次匹配到的字串予以替換,而非完全替換所有的匹配結果。
那麼怎樣才能實現完全替換呢?正規表示式!
desstr = srcstr.replace(/one/g, 'zero');
再看結果:zero or zero is zero
繼續,將源字串修改為句首字母大寫形式:var srcstr = 'one or zero is one',執行上面的**,
結果:one or zero is zero
已經完全替換所有匹配結果了,怎麼還不行?
可能你已經知道原因了,區分大小寫。
繼續解決問題,通過/i忽略大小寫的差異:desstr = srcstr.replace(/one/gi, 'zero');
再看結果:
zero or zero is zero
2、物件本身還是引用?
var src = [1,2,3];
des = src;
des = ;
此時,src也同樣是了麼?
答案是否定的,這就是著名的"物件傳遞時實際只是在傳遞引用",於是乎就有了des被重新賦值為空陣列,而其從src處得來的引用指向的物件(陣列[1,2,3]),仍然不變。
所以當想清空該陣列物件時,需要使用length屬性來截斷,即操作引用對應物件本身的屬性,進而影響該物件。
des.length = 0;
C C之易犯錯的地方
1 cin char str new char 100 cin str cout str endl 例如 輸入 ajfgjsfg djfhsdjgh sdjgsdjgj 輸出 ajfgjsfg說明cin讀取到直到遇到空格。2 strlen char str1 cout strlen str1 end...
新手易犯錯誤集
include include define exp 0.00000001 int main else else if disc 0.0 else return 0 今天在寫這個 的時候犯了很多錯誤決定把它記下來,以後就不會犯了,1 今天寫的時候在else後面還加了小括號寫了判斷語句,後來經查得知。...
PHP易犯錯誤集錦
1 布林值問題 以下情況的值均為false 布林值 false 本身 整型值 0 零 浮點型值 0.0 零 空字串,以及字串 0 不包括任何元素的陣列 特殊型別 null 包括尚未賦值的變數 字串false var dump bool false bool true 型別自動轉換問題 字串all會轉...