淘先锋技术网

首页 1 2 3 4 5 6 7
最近我在学习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时遇到的一些坑,当然这些只是我碰到的问题,实际上还有很多其他的问题。如果大家对这些问题有更好的掌握经验,欢迎留言