看一下代码打印结果:
console.log(1 == true); //true
console.log(undefined == null) //true
console.log(1 == '1'); //true
console.log([1, 2, 3] == '1,2,3'); //true
你们会发现,他们都是true,为什么会这样的 这就涉及到原理了,其实==它比较的是值 只要值相同他就是true,而以上情况会涉及到一个Object的一个方法 然后形成隐式转换,那么这个转换是什么时候触发的呢再看一个代码
let a = [1,2]
let b = '1,2'
if (a = b) {
console.log(typeof b); //string
}
你会发现它是string 这里就会有疑问 不是已经隐式转换了吗,为什么转换之后还是string呢,其实这也是原理 它转换时用Object中valueof()方法来转换的 ,而它的这个方法是js再后台自动执行的方法 ,不会再代码中显示出来的 这面一个代码会看到很清晰:
你把valueOf方法重写 或者 执行到这里直接return掉 不让他隐式转换 你就会发现他是一个false,所以这篇文章也就是一个小提示,如果大家作比较的时候一定要记住 用‘===’ 的方式来判断,避免会出现很多的问题等等
=== 也就不用说了 他会比较值,也会比较数据类型,这就不用多说了