【Javascript】Object.is() 与比较操作符 “===”、“==” 的区别

Object.is() 与比较操作符 “=== ”、“==” 的区别

1、 ==

  • 执行类型转换,然后进行比较,适用于比较值时允许类型转换的场景。
  • null 和 undefined 相等。
  • String 和 Number 相等时会尝试转换为数值进行比较。
  • 如果有布尔值,会先将布尔值转换为数值(true转为1,false转为0)再进行比较。
  • 对象与非对象比较时,对象会通过调用其toString()或valueOf()方法转换为原始值进行比较。

2、 ===

  • 不执行类型转换,如果类型不同立即返回false,类型相同再比较值。
  • 较为严格,更能精确地判断两个值是否真正相等。
  • 一个特殊情况是NaN === NaN 会返回false,因为在IEEE 754标准中,NaN被视为与任何值都不相等,包括它自己。
  • +0 === -0会返回true,尽管在数学上+0和-0有细微的差别。

3、Object.is()

  • ES6引入的方法,行为方式类似于严格等于,但对待NaN和+0/-0有不同处理。
  • Object.is(NaN, NaN) 会返回true,解决了使用===时NaN的比较问题。
  • Object.is(+0, -0) 会返回false,更精确地对待了+0和-0。
  • 在大多数情况下与 === 行为一致,特殊处理了上面两种边缘情况。

4、对比示例

// == 
console.log('1' == 1);           // true,类型转换
console.log(null == undefined);  // true
console.log(true == 1)           // true

// === 
console.log('1' === 1);          // false,类型不同则不等
console.log(NaN === NaN);        // false,特殊情况
console.log(+0 === -0);          // true,认为+0和-0相等

// Object.is()
console.log(Object.is('1', 1));    // false,类型不同则不等,类似===
console.log(Object.is(NaN, NaN));  // true,特殊处理NaN
console.log(Object.is(+0, -0));    // false,+0和-0视为不等,与===不同

5、总结

  • 使用==适合需要自动类型转换的比较。
  • 使用===是最常见的比较方式,因为它不进行类型转换,减少了意外的情况,适用于大多数场景。
  • Object.is()方法在做一些更精确的比较时非常有用,尤其是处理NaN和+0/-0等特殊情况时。
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以给你一个参考实现:function Object.is(val1, val2) { // 如果两个值相等,则返回true if (val1 === val2) { return true; } // 如果两个值不是同一个类型,则返回false if (typeof val1 !== typeof val2) { return false; } // 执行特殊情况的比较 if (val1 !== val1 && val2 !== val2) { // NaN return true; } if (val1 === 0 && val2 === 0) { return 1 / val1 === 1 / val2; } // 执行默认情况的比较 return val1 === val2; } ### 回答2: Object.is是一个用于比较两个值是否相等的方法。手动实现Object.is可以通过以下步骤完成: 1. 首先,判断两个值是否完全相等。如果两个值完全一样,则直接返回true。 2. 其次,判断两个值是否都为NaN。由于NaN不等于任何值,包括自身,在比较时需要特殊处理。可以使用isNaN()函数来判断一个值是否为NaN,如果两个值都是NaN,则返回true。 3. 再次,判断两个值是否都为0。由于0存在正0和负0两种表示方式,在比较时需要区分。可以使用1/x来判断一个值是否为正0或负0,如果返回的是Infinity或-Infinity,则表示该值为0,否则不为0。如果两个值都是0,则返回true。 4. 最后,使用严格相等(===)来判断两个值是否相等。如果上述条件都不满足,则通过使用严格相等运算符来比较两个值,如果相等则返回true,否则返回false。 以下是手动实现Object.is的代码示例: ```javascript function myObjectIs(value1, value2) { // 判断两个值是否完全相等 if (value1 === value2) { // 返回true return true; } // 判断两个值是否都为NaN if (isNaN(value1) && isNaN(value2)) { // 返回true return true; } // 判断两个值是否都为0 if (1/value1 === Infinity && 1/value2 === Infinity) { // 返回true return true; } // 使用严格相等比较两个值 return false; } ``` 通过以上手动实现的代码,我们可以得到与Object.is方法相同的比较结果。 ### 回答3: Object.is是一个用于比较两个值是否严格相等的方法。它会判断两个值是否具有相同的类型和值,一般用于解决JavaScript中对于NaN和+0/-0判断的不准确性。下面是一个手动实现的Object.is的示例代码: ```javascript function myObjectIs(value1, value2) { // 判断是否为+0/-0 if (value1 === 0 && value2 === 0) { return 1 / value1 === 1 / value2; } // 判断是否为NaN if (isNaN(value1) && isNaN(value2)) { return true; } // 判断其他情况 return value1 === value2; } ``` 在这个实现中,首先,我们用全等操作符(===)判断两个值是否为+0/-0。由于+0和-0在除法运算中会得到不同的值,所以我们使用1/value的方式进行比较。 接着,我们用isNaN函数判断两个值是否都为NaN,因为NaN与任何值都不相等(包括它自己),所以我们直接返回true。 最后,对于其他情况,我们使用全等操作符(===)进行比较。 通过这个手动实现的Object.is函数,我们可以更准确地判断两个值是否严格相等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值