JavaScript对象标识及相等判定

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,希望对你有所帮助,让我们一起努力走向巅峰!

你可能感兴趣的:(javascript)