js等号生出的BUG,让我痛苦不堪,来看看我对等号做出的迷惑行为

136 阅读2分钟

「这是我参与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);
        }

运行结果

图片.png

再比如

        age = 17;

        if (age = 18) {
            console.log('您终于18岁了');
        }

例如这里的需求是只要是年龄等于18岁的,那么就输入您终于18岁了,可是当年龄不等于或等于18岁时的输出结果却是始终输出“您终于18岁了”:

图片.png

上面这个程序,妥妥的属于逻辑错误,如果代码量大,将很难发现这个bug。导致这个bug的原因是,在if语句中我做的不是判断操作而是赋值操作。一个等于号是将右边的值赋值给左边。所以if括号中age=18实际是将18赋值给age。当if语句中的值是数值时只要不是0,条件都为true,所以会执行if大括号中的代码。

另外给您一个小小的建议:您不妨在whlie循环中使用一下这样的操作,当然等号右边最好不为0。将有意外收获哦!电脑性能不好的同学们,咱不推荐尝试哈。