一、==
双等号判等,会在比较时进行类型转换。1、如果操作数都是对象,则仅当两个操作数都引用同一个对象时才返回true。
const obj = {name:"张三", age:20}
const obj2 = obj
console.log({name:"张三", age:20} == obj) //false
console.log(obj2 == obj) //true
2、如果一个操作数是null,另一个操作数为undefined,则也返回true
。
console.log(null == undefined) //true
3、如果两个操作数是不同的类型,就会在进行比较之前进行类型的转换,将其转换为不同的类型。
1、当数字和字符串进行比较时,会尝试将字符串转化为数字。
console.log("1221" == 1221) //true
2、如果操作类型为布尔值,会将true转换为1,false转化为0。
console.log(true == 1) //true
console.log(false == 0) //true
3、如果操作数之一为对象,另一个是数字或者字符串,会尝试使用valueOf()和toString()方法将对象转化为原始值。
console.log(Number(10) == 10)
console.log(Number(10))
4、如果操作数的类型相同
1、String类型仅当两个操作数具有相同顺序的字符才返回true。
2、Number类型,仅当两者具有相同的值时才返回true,+0和-0被视为相同的值。如果任何一个操作数为NaN,则直接返回false.
console.log(+0 == -0) //true
console.log(NaN == NaN) //false
二、===
三等号判断,比较时不进行隐式类型转化,类型不同则返回false。
1、如果操作数的类型不同,则返回false。
console.log("12" === 12) //false
2、如果两个操作数都是对象时,只有当他们都指向同一个对象时才返回true.
3、如果两个操作数都是null,或者两个操作数都是undefined,返回true.
console.log(null === null) //true
console.log(undefined === undefined) //true
4、如果存在NaN,则返回false。
console.log(NaN === NaN) //false
5、+0和-0在三等号下是相等的。
console.log(+0 === -0) //true。
三、Object.is()Object.is()和三等运算符很像,但是仍然存在一些差别,比如说对于NaN,对于+0和-0之间的比较
。
console.log(Object.is(10, 10)) //true
console.log(Object.is(NaN, NaN)) //true
console.log(Object.is({}, {})) // false
console.log(Object.is(12, "12")) //false
console.log(Object.is(true, 1)) //false
console.log(Object.is(false, false)) //true
console.log(Object.is(+0, -0)) //false
console.log(Object.is(undefined, null)) //false
满足如下条件的Object.is()
的返回值为true.1.、都为undefined
。2、都是null
3、都是true或者都是false
.4、都是相同长度的字符串并且相同字符换按照相同的顺序排列
。5、都是相同的对象(同一个引用)
6、都是数字,且大都是+0,或者都是-0,或者都是NaN或者都是非零而且非NaN且为同一个值
。
四、总结Object.is()
与==
运算不同之处在于==
需要做类型转化,但是Object.is()
不需要做类型转化。Object.is()
与===
运算不同之处在于,在===
下,+0
和-0
相同,NaN
和NaN
不同,在Object.is()
下,+0和-0
不相同,NaN和NaN
相同。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123085255
内容来源于网络,如有侵权,请联系作者删除!