協助避免錯誤的Javascript陷阱清單

來源:互聯網
上載者:User

翻譯講究"信\雅\達",我就談不上了.希望能把文章的意思不要弄錯就行.

編程的陷阱(gotcha)是指電腦系統中的意想不到的文檔特徵而不是bug.這些陷阱使得初學者遠離javascript編程.在我看來,因為所有的瀏覽器都能運行javascript使得它是使用最廣泛的語言之一,但它也是最少人研究的.讓我們從一個基礎的樣本開始.

1.浮點運算

這可能是挫敗一些對javascript不熟悉並準備執行一些數學運算的人的主要原因.

  1. <script>
  2. alert(0.02 / 0.1); //0.19999999999999998
  3. alert(1.14 * 100); //113.99999999999999
  4. </script>

Math.round()就能在這裡派上用場.

2.加號操作符的重載

"+"加號運算子即能做算術運算,又能夠做字串的串連.如果正確的使用它是很便利的.讓我們看一看.

  1. <script>
  2. var msg, one="1";
  3. msg = 2 + "1"; // msg = "21"
  4. msg = 2 + one; // msg = "21"
  5. msg = 1 + 1 + 1 + " musketeers"; // msg = "3 musketeers"
  6. msg = "Bond " + 0 + 0 + 7; //msg = "Bond 007"
  7. </script>

上述行為是因為這些運算都是從左至右執行的.類型的轉換是基於其中的字串或數字.

3.行尾插入分號

javascript 自動在行尾插入分號";",讓我們來看看這在一個簡單的樣本中的情況.

  1. <script>
  2. function returnSame(a){
  3. return //Inserts semi-colon to convert to return;
  4. a //a becomes a; - Unreachable
  5. }
  6. alert(returnSame(2)); //Output is undefined
  7. </script>

當在建立對象或使用對象的值的時候這個神奇的分號能使事情變得更複雜.

4.typeof操作符

typeof 是一個一元操作符,運算結果往往並不是如預期的那樣.令人吃驚的是對"null"的運算結果是"object"

  1. <script>
  2. var obj={}; //object created using object literal
  3. var arr=[]; //array created by array literal
  4. alert(typeof(obj)); //object - Good
  5. alert(typeof(arr)); //object - Bad
  6. alert(typeof(null)); //object - Ugly!
  7. </script>

它僅僅能尋找對象的原始類型.

5. false, null, undefined, NaN, Infinity

儘管他們看起來相似,但他們代表著不通的意思.javascript有3種基礎資料型別 (Elementary Data Type)數字numbers, 字串strings 和布爾 boolean,除此之外還有兩個不重要的資料類型"undefine"和"null".按照"=="運算子運算,null和undefine是相等的.

  1. <script>
  2. var a;
  3. alert (a); //undefined
  4. alert (1/0); //Infinity
  5. alert (0/0); //NaN
  6. 0/0 == 0/0; //false - a NaN != NaN
  7. alert (b); //error
  8. </script>

6.字串只替換第一個匹配的字元

與PHP或其他程式語言不同,預設情況下,javascript的字元替換隻替換第一個出現的匹配的字元.

  1. <script>
  2. var nospace = "I dont need spaces".replace(" ","_");
  3. alert(nospace); //I_dont need spaces - Only first occurence
  4. var nospace = "I dont need spaces".replace(/ /g,"_");
  5. alert(nospace); //I_dont_need_spaces
  6. </script>

7.parseInt 函數

parseInt 用來將一個字串轉換為整數類型.這個函數能傳入兩個參數,第二個參數是指定多少進位的.這裡十進位用 10 指定.如果沒有指定進位,則parseInt函數自己會試圖找到合適的進位.如果是這樣,以0開頭的字串將會轉換為8進位.

  1. <script>
  2. var str = "017";
  3. var strInt = parseInt(str); //strInt = 15
  4. var strInt = parseInt(str,10); //strInt = 17
  5. </script>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.