最近我在學習JavaScript,不禁感慨這門語言的坑確實不少??!一不小心就會踩中,讓人魚兒淚崩。下面我來吐槽一下我遇到的一些問題。
首先是JavaScript的弱類型,在變量賦值的時候沒有類型檢查,導致我在操作數據時經常會遇到一些奇怪的問題。比如:
var num = "1"; console.log(num + 1); //輸出"11",因為num是字符串類型
這就令人很無語了,如果變量類型錯誤的話,我們往往會浪費很多時間來查找問題所在。
其次是JavaScript的作用域,這也是我最常踩的坑之一。在使用var定義變量時,如果不注意作用域的問題,就會導致程序出現一些奇怪的錯誤。比如:
for (var i = 0; i< 5; i++) { setTimeout(function () { console.log(i); }, 1000); }
這段代碼本來應該輸出0,1,2,3,4,但是結果是5,5,5,5,5。這是因為setTimeout是異步的,當循環結束后才會執行,而此時i已經是5了。
還有一個常見的問題就是this的指向,它經常讓人頭疼。在JavaScript中,this的指向是動態的,具體是由函數的調用方式來決定的。比如:
var obj = { name: "jack", sayName: function () { console.log(this.name); } }; var sayName = obj.sayName; sayName(); //輸出undefined,因為此時this指向的是window對象
這一點需要我們在編寫代碼的時候特別注意,不然很容易就會出現思路混亂的情況。
最后一個問題是JS的異步事件隊列,也是我覺得最令人頭疼的一個問題。如果處理不好異步事件,也容易導致程序出現各種奇怪的錯誤。比如:
var oImg = document.createElement("img"); oImg.src = "image.png"; oImg.onload = function () { console.log(oImg.width); }; console.log(oImg.width); //輸出0,因為圖片還沒有加載完成
如果不注意異步事件的處理,很容易就會出現前后數據不一致的問題。
以上就是我在學習JavaScript時遇到的一些坑,當然這些只是我碰到的問題,實際上還有很多其他的問題。如果大家對這些問題有更好的掌握經驗,歡迎留言