網頁制作poluoluo文章簡介:編程的陷阱(gotcha)是指計算機系統中的意想不到的文檔特征而不是bug.這些陷阱使得初學者遠離javascript編程.在我看來,因為所有的浏覽器都能運行javascript使得它是使用最廣泛的語言之一,但它也是最少人研究的.讓我們從一個基礎的示例開始.
編程的陷阱(gotcha)是指計算機系統中的意想不到的文檔特征而不是bug.這些陷阱使得初學者遠離javascript編程.在我看來,因為所有的浏覽器都能運行javascript使得它是使用最廣泛的語言之一,但它也是最少人研究的.讓我們從一個基礎的示例開始.
1.浮點運算
這可能是挫敗一些對javascript不熟悉並准備執行一些數學運算的人的主要原因.
- <script>
- alert(0.02 / 0.1); //0.19999999999999998
- alert(1.14 * 100); //113.99999999999999 ;)
- </script>
Math.round()就能在這裡派上用場.
2.加號操作符的重載
"+"加號運算符即能做算術運算,又能夠做字符串的連接.如果正確的使用它是很便利的.讓我們看一看.
- <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>
上述行為是因為這些運算都是從左到右執行的.類型的轉換是基於其中的字符串或數字.
3.行尾插入分號
javascript 自動在行尾插入分號";",讓我們來看看這在一個簡單的示例中的情況.
- <script>
- function returnSame(a){
- return //Inserts semi-colon to convert to return;
- a //a becomes a; - Unreachable
- }
- alert(returnSame(2)); //Output is undefined
- </script>
當在創建對象或使用對象的值的時候這個神奇的分號能使事情變得更復雜.
4.typeof操作符
typeof 是一個一元操作符,運算結果往往並不是如預期的那樣.令人吃驚的是對"null"的運算結果是"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>
它僅僅能查找對象的原始類型.
5. false, null, undefined, NaN, Infinity
盡管他們看起來相似,但他們代表著不通的意思.javascript有3種基本數據類型數字numbers, 字符串strings 和布爾 boolean,除此之外還有兩個不重要的數據類型"undefine"和"null".按照"=="運算符運算,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.字符串只替換第一個匹配的字符
與PHP或其他程序語言不同,默認情況下,javascript的字符替換只替換第一個出現的匹配的字符.
- <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 函數
parseInt 用來將一個字符串轉換為整數類型.這個函數能傳入兩個參數,第二個參數是指定多少進制的.這裡十進制用 10 指定.如果沒有指定進制,則parseInt函數自己會試圖找到合適的進制.如果是這樣,以0開頭的字符串將會轉換為8進制.
- <script>
- var str = "017";
- var strInt = parseInt(str); //strInt = 15 ;)
- var strInt = parseInt(str,10); //strInt = 17
- </script>