字符串替換
一個常見錯誤是假設字符串替換方法的行為會對所有可能匹配都產(chǎn)生影響。實際上,JavaScript字符串替換只改變了第一次發(fā)生的地方。為了替換所有發(fā)生的地方,你需要設置全局標識。同時需要記住String.replace()的第一個參數(shù)是一個正則表達式。
var myString = "this is my string"; myString = myString.replace("","%20"); // "this%20is my string" myString = myString.replace(/ /,"%20"); // "this%20is my string" myString = myString.replace(/ /g,"%20"); // "this%20is%20my%20string"
parseInt
在JavaScript得到整數(shù)的最常見錯誤是假設parseInt返回的整數(shù)是基于10進制的。別忘記第二個參數(shù)基數(shù),它能是從2到36之間的任何值。為了確保你不會弄錯,請一直包含第二個參數(shù)。
parseInt('09/10/08'); //0 parseInt(’09/10/08′,10); //9, 它最可能是你想從一個日期中得到的值
如果parseInt沒有提供第二個參數(shù),則前綴為 ‘0x’ 的字符串被當作十六進制,前綴為 ‘0′ 的字符串被當作八進制。所有其它字符串都被當作是十進制的。如果 numString 的前綴不能解釋為整數(shù),則返回 NaN(而不是數(shù)字)。
‘this’
另一個常見的錯誤是忘記使用“this”。在JavaScript對象中定義的函數(shù)訪問這個對象的屬性,但沒有使用引用標識符“this”。例如,下面是錯誤的:
function myFunction() { var myObject = { objProperty: "some text", objMethod: function() { alert(objProperty); } }; myObject.objMethod(); }
function myFunction() { var myObject = { objProperty: "some text", objMethod: function() { alert(this.objProperty); } }; myObject.objMethod(); }
有一篇 A List Apart文章 用通俗易懂的英文表達了this綁定的問題。
對this使用最大的陷阱是this在使用過程中其引用會發(fā)生改變:
<input type="button" value="Gotcha!" id="MyButton"> <script> var MyObject = function () { this.alertMessage = "Javascript rules"; this.ClickHandler = function() { alert(this.alertMessage ); //返回結果不是”JavaScript rules”,執(zhí)行MyObject.ClickHandler時, //this的引用實際上指向的是document.getElementById("theText")的引用 } }(); document.getElementById(”theText”).onclick = MyObject.ClickHandler </script>
其解決方案是:
var MyObject = function () { var self = this; this.alertMessage = “Javascript rules”; this.OnClick = function() { alert(self.value); } }();
類似問題的更多細節(jié)和解決方案請看《JavaScript作用域的問題》。
出處:藍色理想
責任編輯:bluehearts
上一頁 JavaScript的陷阱 [3] 下一頁 JavaScript的陷阱 [5]
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|