首頁  >  文章  >  web前端  >  在JavaScript中遇到的BUG

在JavaScript中遇到的BUG

亚连
亚连原創
2018-06-20 11:44:382629瀏覽

給大家詳細著整理了在JavaScript開發中大家常遇到的BUG和問題,需要的朋友參考學習下吧。

就算最牛的JavaScript開發者也會犯錯。有時候導致程式的執行結果和預期不一樣,有時候根本無法運作。這裡我總結了10個常見的錯誤,我相信不管是初級還是資深開發者都可能遇到。

相等混淆

x是否和y相等? x是否為真?在JavaScript中,如何正確地做相等判斷很重要,但似乎很多人搞不清楚。簡單概括一下,主要是以下三種情況:條件判斷(if, &&, etc.),相等運算子(==),和嚴格相等運算子(===)。

甚至,有的時候會不小心把賦值(=)當做相等運算子使用,千萬不要搞錯了!

避免使用賦值(=)

賦值(=)將右邊的表達式賦值給左邊的變量,例如:

var a = 3;

此語句宣告了一個新的變數a,值為3。

表達式可以是程式中的任何東西,想像把它類比為語言中的名詞,操作符( ,-,*,/)類比為動詞。初學者常見的錯誤就是誤用賦值(=)作為相等判斷符。

if (a=4){...}

程式碼並不會像預期的執行那樣。

慎用相等運算子

相等運算子(==)和他的雙胞胎不等運算子(!=)非常好用,但也很危險,盡量少用。接下來介紹為什麼:

0 == '0'

在相等符號下,0和0是相等的!因為解釋器發現左右型別不一致,首先做了隱式型別轉換。這會導致各種各樣的問題,然後一出錯就很難找到問題原因。

如果你真的想判斷一個字串包含的數字和某個數字是否真的相同,建議你這麼做:

parseInt(0) === parseInt('0')

所以,建議使用嚴格相等/不等操作符。

0 === '0'

會回傳false。

遺失的大括號

當程式變得複雜,特別是如果你使用JavaScript物件來儲存資料的話,大括號會越來越多。下面是一段程式碼,但少了一個大括號:

{
 “status”: “OK”,
 “results”: [{
 “id”: 12,
 “title”: “Coding JavaScript For Dummies”,
 “author”: “Chris Minnick and Eva Holland”,
 “publication_date”: ““,
 “summary_short”: ““,
 “link”: {
 “type”: “review”,
 “url”: ““,
 “link_text”: “Read the New York Times Review 
of Coding JavaScript For Dummies”
 },
 “awards”: [{
 “type”: “Nobel Prize”,
 “url”: ““,
 }]
}

你能看出來哪裡少了東西嗎?當不確定的時候,一個好的編輯器將會非常有用。 Sublime Text有一個很不錯的功能,當你把遊標放在某個大括號的時候,和它匹配的大括號會高亮出來。

不符的引號

在定義字串的時候,你可以自由使用單引號或則雙引號。但是,如果一個字串單引號開始,雙引號結束就不行了。而且你需要注意本身字串中的單引號或則雙引號。

var movieName = “Popeye'; // error!
var welcomeMessage = ‘Thank you, ‘ + firstName + ‘, let's learn JavaScript!' // error!

總的來說,個人認為是一個非常靈活且好用的功能,但一定要小心!

缺少必要的圓括號

該錯誤往往在條件語句出錯處,特別是有多個條件的時候。

if (x > y) && (y < 1000) {
...
}

如果你注意看,會發現少了括號,正確的應該是這樣:

if ((x > y) && (y < 1000)) {
...
}

缺少分號

JavaScript中的語句都應該分號結束。但如果這些語句各自佔一行,那你不寫分號也沒關係。不過不建議使用,因為會有潛在問題。如果你使用自動程式碼美化工具可能錯誤的將不同行的程式碼合併而出錯。

最好的策略就是都要加分號。

大寫錯誤

JavaScript對大小寫敏感,你需要對變數和函數的命名小心,不能把大小寫搞錯了。例如,Document物件的getElementById函數常常被寫錯為getElementByID。

在載入前引用

JavaScript的程式碼通常是依序執行,如果你引用了後面才建立的元素將會報錯。

<html>
<head>
 <script>
 document.getElementById(“myp”).innerHTML = “This p is my p”;
 </script>
</head>
<body>
 <p id = “myp”>This p is your p.</p>
</body>
</html>

在腳本執行的時候,瀏覽器還不知道myp是什麼。

避免這個問題的方法有很多:

將程式碼放到最後,也就是36cc49f0c466276486e50c850b7e4956後面

將程式碼放到函數中,並且和body的onload綁定。

<html>
<head>
 <script>
 function nameMyp() {
 document.getElementById(“myp”).innerHTML = “This p is my p”;
 }
 </script>
</head>
<body onload = “nameMyp();”>
 <p id = “myp”>This p is your p</p>
</body>
</html>

濫用保留字做變數名稱

#一個很難被追蹤的問題就是使用保留字做變數名稱。 JavaScript中有超過60個保留字。當然,你不可能都把它們記住來避免使用。最好的方法就是使用更具描述性的字元來命名變數。

舉個例子,name是一個保留字。如果你喜歡用name,那麼最好細化,像是firstName,lastName,dogName和nameOfTheWind。

作用域問題##########

JavaScript中有函数作用域和全局作用域。如果你没有使用var关键字来声明,那么它是全局的。为了确保不同作用域的安全隔离,建议使用var。译者补充:建议使用let,更加安全,可参考本文:ES6之”let”能替代”var”吗?。

函数调用缺少参数

在JavaScript中,在函数调用的时候少了几个参数,有时候并不会出错,但可能达不到预期的执行结果。所以,确保你传入了足够的函数参数。

从0开始

永远不要忘记数组是从0开始。

var myArray = new Array();
myArray[10] = “List of 10 Common Mistakes”;
myArray.length; // 输出11!

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在vue中详细介绍mixins和extends用法

在canvas中如何实现轨迹回放功能

在vue.js中通过vue-router如何实现无效路由提示

在Vue中extend 、component有哪些区别?

以上是在JavaScript中遇到的BUG的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn