幫助避免錯(cuò)誤的Javascript陷阱清單
翻譯講究"信\雅\達(dá)",我就談不上了.希望能把文章的意思不要弄錯(cuò)就行.
編程的陷阱(gotcha)是指計(jì)算機(jī)系統(tǒng)中的意想不到的文檔特征而不是bug.這些陷阱使得初學(xué)者遠(yuǎn)離javascript編程.在我看來(lái),因?yàn)樗械臑g覽器都能運(yùn)行javascript使得它是使用最廣泛的語(yǔ)言之一,但它也是最少人研究的.讓我們從一個(gè)基礎(chǔ)的示例開(kāi)始.
1.浮點(diǎn)運(yùn)算
這可能是挫敗一些對(duì)javascript不熟悉并準(zhǔn)備執(zhí)行一些數(shù)學(xué)運(yùn)算的人的主要原因.
- <script>
- alert(0.02 / 0.1); //0.19999999999999998
- alert(1.14 * 100); //113.99999999999999 ;)
- </script>
Math.round()就能在這里派上用場(chǎng).
2.加號(hào)操作符的重載
"+"加號(hào)運(yùn)算符即能做算術(shù)運(yùn)算,又能夠做字符串的連接.如果正確的使用它是很便利的.讓我們看一看.
- <script>
- var msg, one="1";
- msg = 2 + "1"; // msg = "21"
- msg = 2 + one; // msg = "21"
- msg = 1 + 1 + 1 + " musketeers"; // msg = "3 musketeers"
- msg = "Bond " + 0 + 0 + 7; //msg = "Bond 007"
- </script>
上述行為是因?yàn)檫@些運(yùn)算都是從左到右執(zhí)行的.類型的轉(zhuǎn)換是基于其中的字符串或數(shù)字.
3.行尾插入分號(hào)
javascript 自動(dòng)在行尾插入分號(hào)";",讓我們來(lái)看看這在一個(gè)簡(jiǎn)單的示例中的情況.
- <script>
- function returnSame(a){
- return //Inserts semi-colon to convert to return;
- a //a becomes a; - Unreachable
- }
- alert(returnSame(2)); //Output is undefined
- </script>
當(dāng)在創(chuàng)建對(duì)象或使用對(duì)象的值的時(shí)候這個(gè)神奇的分號(hào)能使事情變得更復(fù)雜.
4.typeof操作符
typeof 是一個(gè)一元操作符,運(yùn)算結(jié)果往往并不是如預(yù)期的那樣.令人吃驚的是對(duì)"null"的運(yùn)算結(jié)果是"object"
- <script>
- var obj={}; //object created using object literal
- var arr=[]; //array created by array literal
- alert(typeof(obj)); //object - Good
- alert(typeof(arr)); //object - Bad
- alert(typeof(null)); //object - Ugly! ;)
- </script>
它僅僅能查找對(duì)象的原始類型.
5. false, null, undefined, NaN, Infinity
盡管他們看起來(lái)相似,但他們代表著不通的意思.javascript有3種基本數(shù)據(jù)類型數(shù)字numbers, 字符串strings 和布爾 boolean,除此之外還有兩個(gè)不重要的數(shù)據(jù)類型"undefine"和"null".按照"=="運(yùn)算符運(yùn)算,null和undefine是相等的.
- <script>
- var a;
- alert (a); //undefined
- alert (1/0); //Infinity
- alert (0/0); //NaN
- 0/0 == 0/0; //false - a NaN != NaN
- alert (b); //error
- </script>
6.字符串只替換第一個(gè)匹配的字符
與PHP或其他程序語(yǔ)言不同,默認(rèn)情況下,javascript的字符替換只替換第一個(gè)出現(xiàn)的匹配的字符.
- <script>
- var nospace = "I dont need spaces".replace(" ","_");
- alert(nospace); //I_dont need spaces - Only first occurence
- var nospace = "I dont need spaces".replace(/ /g,"_");
- alert(nospace); //I_dont_need_spaces
- </script>
7.parseInt 函數(shù)
parseInt 用來(lái)將一個(gè)字符串轉(zhuǎn)換為整數(shù)類型.這個(gè)函數(shù)能傳入兩個(gè)參數(shù),第二個(gè)參數(shù)是指定多少進(jìn)制的.這里十進(jìn)制用 10 指定.如果沒(méi)有指定進(jìn)制,則parseInt函數(shù)自己會(huì)試圖找到合適的進(jìn)制.如果是這樣,以0開(kāi)頭的字符串將會(huì)轉(zhuǎn)換為8進(jìn)制.
- <script>
- var str = "017";
- var strInt = parseInt(str); //strInt = 15 ;)
- var strInt = parseInt(str,10); //strInt = 17
- </script>
- JavaScript中for..in循環(huán)陷阱介紹
- 比較搞笑的js陷阱題
- JavaScript性能陷阱小結(jié)(附實(shí)例說(shuō)明)
- Javascript 陷阱 window全局對(duì)象
- JavaScript 存在陷阱 刪除某一區(qū)域所有節(jié)點(diǎn)
- 錯(cuò)誤剖析之JavaScript的9個(gè)陷阱及評(píng)點(diǎn)
- JavaScript的9個(gè)陷阱及評(píng)點(diǎn)分析
- JavaScript中常見(jiàn)陷阱小結(jié)
- 在JavaScript中遭遇級(jí)聯(lián)表達(dá)式陷阱
- JavaScript中常見(jiàn)的八個(gè)陷阱總結(jié)
相關(guān)文章
window.location的重寫及判斷l(xiāng)ocation是否被重寫
這篇文章主要介紹了window.location的重寫及判斷l(xiāng)ocation是否被重寫,需要的朋友可以參考下2014-09-09