Object.is() 同值相等
同值相等的底层实现 Object.is()
Object.is() 是 ES6抛出来的方法
ES5并没有暴露js引擎的同值相等的方法
不进行隐式类型转换 '1’与 1
var a = 1
var b = '1'
var res = Object.is(a, b)
console.log(res); // false
+0 与 0 与 -0
Object.is(+0, 0) // true
Object.is(-0, 0) // false
Object.is(+0, -0) // false
NaN 与 NaN 相等
var a = NaN
var b = NaN
var res = Object.is(a, b)
console.log(res); // true
undefined 与 undefined 相等
var res = Object.is(undefined, undefined)
console.log(res); // true
null 与 null 相等
var res = Object.is(null, null)
console.log(res); // true
对象
var obj = {}
const res = Object.is(obj,obj) // 同一引用相等
const res = Object.is({},{}) // 不同引用不相等
手写
要点
- -0 !== +0
- NaN === NaN
Object.myIs = function (a, b) {if (a === b) {// 用来判断 0 的情况// 1 / +0 = Infinity 1 / -0 = -Infinity// Infinity !== -Infinityreturn a !== 0 || 1 / a === 1 / b;}// 用来判断 NaN 的情况 js中NaN !== NaNreturn a !== a && b !== b;
};