1.电脑系统 windows10专业版
2.在开发的过程中,我们经常会使用 js相等进行判定,下面我来分享一下我遇到的问题和简单的总结。
3.在 ECMAScript6之前,有些特殊情况即使是 === 操作符也无能为力:
3-1.这些是 === 符合预期的情况**
console.log(true === 1); // false
console.log({}==={}); //false
console.log("2"===2); //false
3-2.这些情况在不同 JavaScript 引擎中表现不同,但仍被认为相等
console.log(+0===-0); // false
console.log(+0===0); //true
console.log(-0===0); true
3-3.要确定 NaN 的相等性,必须使用极为讨厌的 isNaN()
console.log(NaN===NaN); //false
console.log(isNaN(NaN)); //true
3-4.为了改善这类情形,ECMAScript6规范新增了 Object.is(),这个方法与 === 很像,但同时也考虑到了上述边界情形。这个方法必须接受两个参数:
console.log(Object.is(true,1)); // false
console.log(Object.is({},{})); // false
consoe.log(Object.is("2",2)); // false
3-5.正确的 0 \ -0 \ +0 相等/不等判定
console.log(Object.is(+0,-0)); //false
console.log(Object.is(+0,0)); // true
console.log(Object.is(-0,0)); //false
3-6.正确的 NaN 相等判定
console.log(Object.is(NaN,NaN)); //true
3-7.要检查超过两个值,递归地利用相等性传递即可:
function recursivelyCheckEqual(x,...rest){
return Object.is(x,rest[0]) && (rest.length<2 || recursivelyCheckEqual(...rest));
}
4.本期的分享到了这里就结束啦,是不是很nice,希望对你有所帮助,让我们一起努力走向巅峰!