JavaScript是一个自由的语言,所以因为太过于自由,然后后期不得不为自由做一些改变,等于==和绝对等于===貌似是两个同样得东西,但是在JavaScript这里貌似又不是那么一回事,我们看一段代码示例
Let a="0" if (a==0){ console.log(true) }else{ console.log(false) }
毫无疑问,这个示例代码显示得是true,但我们仔细看代码其实上面得代码是有问题得,因为我们定义得变量a用了""号所以实际它是一个字符串,但是我们做if比较得时候是比较的数字0,一个是数字一个是字符串如果严格来说它们不是相等的关系,只是js帮我们做号了转换的事情,所以上诉代码if等于true。而这行代码容易出现bug,我们改变一下代码用于实际环境中,如下
let a="1" if (a==0){ a+=5 }
按照我们一般的理解,现在a的值是6,但是实际结果是15。这是因为字符串相加就等于相连,1连接5自然等于15。如果我们平常没注意的话,那么我们就得到了一个错误的计算值,而且还很难发现。其实本质上a并不等于0,只是用==号js会帮我们转换成同一个类型在进行比较。
那么绝对等于===作用就体现出来了啊,绝对等于就是对比的两项要绝对的等于包括它们的类型,下面示例代码
console.log(a==0) console.log(a===0) console.log(a==="0")
上面的代码运行结果分别为true,false,true。所以我们可以明显感觉的出来,如果用于对比操作的话尽量用===会更安全,因为它可以确保等于的值一定相等,而==不会。
另外我们在看一段示例
let a=Array() a=[3,4,5] let b=Object() b=[3,4,5] console.log(a==b) console.log(a===b) console.log(a,b)
打印后如下图
这里我们发现==和===是没啥区别的,然后我们作死在改一下代码。
let a=String() a="0" let b=Object() b=0 console.log(a==b) console.log(a===b)
得到结果true,false,这里虽然用了object但是比对又不同了。然后我们统一做一个总结把
等于和绝对等于的区别
1、数字Number和字符串String==会把它们转换成相同的类型进行对比,而===不会,所以"0"和0==等于true而===等于false,因为这2个值类型不同。
2、Array和Object==和===是没有区别的。
3、如果是基础类型和高级类型(Object),比如Object,String==和===的区别类似与第一条,因为==会把高级类型转换为基础类型,而===不会。
4、特别说明,既然是等于那就有不等于是不是,==不等于是!=,而===是!==,它们的性质是一样的,可以参考上诉3条。
最后总结
现在我们应该明白了==和===的区别了把,所以在实际开发中,如无特殊情况我们尽量使用===号来进行对比操作,因为这样可以尽量的减少BUG的产生