「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。
相信接下来的坑很多人在初学js时和我一样都踩过,那么我就分享一下自己经常踩的坑吧!
js的等号问题
js中有三种等于号,分别是'=','==','===';
他们分别的意思是:
=:将右边的值赋值给左边
==:判断两个值是否一致
if(1=='1') //true
===:区分数据类型的判断两个值是否一致
//数值类型1与字符串类型1,在===判断中由于数据类型不同,所以判断结果是false
if(1==='1') //false
//声明两个对象obj,obj2,将obj赋值给obj2,由于数据类型相同,且引用地址相同,所以判断结果为true
let obj = new Object();
obj = {name:"starqin"}
let obj2 = obj;
console.log(obj === obj2);//true
关于等号的坑,我经常在if判断语句中中枪,例如以下代码
生成一个不重复的长度为10的数字数组
//需要生成的数组
var arr = [];
//调用将随机数push进数组的函数
randArr();
//定义将随机数push进数组的函数
function randArr() {
//注意:我就是喜欢这个地方出错,常常将这里的第二个条件写成arr.length == 10
//如果是==10那么这个循环将不会执行哦
for (var i = 0; arr.length < 10; i++) {
//生成随机数
var data = rand(10, 101);
//判断数组中是否有生成的随机数,如果没有就push,如果有就递归函数
if (!arr.includes(data)) {
arr.push(data);
} else {
randArr();
}
}
}
console.log(arr);
function rand(min, max) {
return parseInt(Math.random() * (max - min) + min);
}
运行结果
再比如
age = 17;
if (age = 18) {
console.log('您终于18岁了');
}
例如这里的需求是只要是年龄等于18岁的,那么就输入您终于18岁了,可是当年龄不等于或等于18岁时的输出结果却是始终输出“您终于18岁了”:
上面这个程序,妥妥的属于逻辑错误,如果代码量大,将很难发现这个bug。导致这个bug的原因是,在if语句中我做的不是判断操作而是赋值操作。一个等于号是将右边的值赋值给左边。所以if括号中age=18实际是将18赋值给age。当if语句中的值是数值时只要不是0,条件都为true,所以会执行if大括号中的代码。
另外给您一个小小的建议:您不妨在whlie循环中使用一下这样的操作,当然等号右边最好不为0。将有意外收获哦!电脑性能不好的同学们,咱不推荐尝试哈。