Object.is()和原来的“===“,“==“之间的区别?

x33g5p2x  于2022-02-24 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(225)

一、==
双等号判等,会在比较时进行类型转换。
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相同,NaNNaN不同,在Object.is()下,+0和-0不相同,NaN和NaN相同。

相关文章

微信公众号

最新文章

更多