美文网首页
js中==和===到底有什么区别?通过实验告诉你真相

js中==和===到底有什么区别?通过实验告诉你真相

作者: 萤火虫叔叔 | 来源:发表于2020-06-16 22:44 被阅读0次
一、结论环节

===是等同符,只有类型和值都一致时,才判定为相等,即返回true
==是等值符,如果类型不同,则先转换成同类型,再比较值是否相等。

二、实验环节

首先我们要知道,js有6中数据类型,即numberstringbooleanobjectundefinednull(关于数据类型,可以看我的另一篇文章,传送门

1. ===的比较规则

===很好理解,首先比较数据类型,如果类型不一样,直接返回键false;如果类型一样,再比较值是否一样。唯一需要注意的是,如果数据类型为object,只有当object指向同一内存时,才返回ture

//即使值一样,类型不一样,结果也是false
console.log(1 === '1') //打印: false

//object类型示例,a与b指向同一内存,a与c则不是
let a = {}
let b = a
let c = {}
console.log(a === b) //打印: true
console.log(a === c) //打印: false
2. ==的比较规则

numberstringboolean这三种类型,可以转化成number类型;而objectundefinednull都无法转换成number。对于前三者之间两两比较,先转化成number,再比值,如果相等则为true,反之为false

//空字符串'',字符串'0',布尔值false转成数字都是0,所以'',0,false,'0'四者等值,两两比较均为true
console.log(0 == '') //打印: ture
console.log(0 == false) //打印: ture
console.log(0 == '0') //打印: ture
console.log('' == false) //打印: ture
console.log('0' == false) //打印: ture

//字符串'1'和布尔值true转成数字都是1,所以这三者之间两两比较也均为true
console.log(1 == true) //打印: ture
console.log(1 == '1') //打印: ture
console.log('1' == true) //打印: true

//附上人工转数字的方法
console.log(Number('')) //打印: 0
console.log(Number(false)) //打印: 0
console.log(Number('1')) //打印: 1
console.log(Number(true)) //打印: 1

/**
 * 需要注意的是,如果类型相同,则不会转换成`number`,而是直接比值。
 * ''和'0'都是string类型,不转换,直接比值,结果不一样,返回false
*/
console.log('' == '0') //打印: false

objectundefinednull三者之间比较,以及分别和其他3种类型比较,结果都是false除了undefined==nulltrue

//object与其他5种类型比较
console.log({} == 0) //打印: false
console.log({} == '{}') //打印: false
console.log({} == false) //打印: false
console.log({} == undefined) //打印: false
console.log({} == null) //打印: false

//undefined与其他4种类型比较
console.log(undefined== 0) //打印: false
console.log(undefined== '') //打印: false
console.log(undefined== {}) //打印: false
console.log(undefined== false) //打印: false

//null与其他4种类型比较
console.log(null == 0) //打印: false
console.log(null == '') //打印: false
console.log(null == {}) //打印: false
console.log(null == false) //打印: false

//null和undefined比值为true
console.log(null == undefined) //打印: true

还有一个奇怪的数字NaN,它表示“这不是一个数字”,NaN的类型是numberNaN和和所有类型的所有值比较,结果都为false甚至和自己比较也是false

console.log(NaN == 0) //打印: false
console.log(NaN == '') //打印: false
console.log(NaN == false) //打印: false
console.log(NaN == {}) //打印: false
console.log(NaN == undefined) //打印: false
console.log(NaN == null) //打印: false
console.log(NaN == NaN) //打印: false

所以,在写代码的时候,推荐使用===

相关文章

网友评论

      本文标题:js中==和===到底有什么区别?通过实验告诉你真相

      本文链接:https://www.haomeiwen.com/subject/vzudxktx.html