美文网首页Web前端之路JavaScript 进阶营
你应该在相等的时候用Object.is()

你应该在相等的时候用Object.is()

作者: ikonan | 来源:发表于2020-09-17 11:41 被阅读0次

    ==

    我们都知道 JavasSript 是弱类型的,并且当我们使用 == 作比较时,在一些情况下由于类型转换或者说“把两个操作数中的一个转换成另一个,然后在比较”,会出现意想不到的结果。

    // 0 == ' '           //true
    // null == undefined  //true
    // [1] == true        //true
    
    console.log('0 == " "', 0 == ' '); // true
    console.log('null == undefined', null == undefined); // true
    console.log('[1] == true', [1] == true); // true
    

    ===

    因此 JavaScript 中给我们提供了全等操作符 ===, 它比不全等操作符更加严格并且不会发生类型转换。但是用 === 来进行比较并不是最好的解决方案。你可能会得到:

     // NaN === NaN //false
     console.log('NaN === NaN', NaN === NaN); // false
    

    Object.is()

    好消息是 ES6 中提供了新的 Object.is() 方法,它具有 === 的一些特点,而且更好、更精确,在一些特殊案例中表现的很好:

    // Object.is(0 , ' '); //false
    // Object.is(null, undefined); //false
    // Object.is([1], true); //false
    // Object.is(NaN, NaN); //true
    
    console.log('Object.is(0 , " ")', Object.is(0, ' ')); // false
    console.log('Object.is(null , undefined)', Object.is(null, undefined)); // false
    console.log('Object.is([1] , true)', Object.is([1], true)); // false
    console.log('Object.is(NaN , NaN)', Object.is(NaN, NaN)); // true
    

    Mozilla 团队并不认为 Object.is 比 === 更加“严格”,他们说我们应该考虑的是这个方法如何处理 NaN, -0 和 +0。但是总的来说, 我认为它在实际应用中是一个很好的实践。

    相关文章

      网友评论

        本文标题:你应该在相等的时候用Object.is()

        本文链接:https://www.haomeiwen.com/subject/vvrlyktx.html