zoukankan      html  css  js  c++  java
  • [Javascript] Object.is() vs ===

    Object.is

    console.log(Object.is(2, 2)); // true
    console.log(Object.is({}, {})); // false

    Strict Equality: a === b

    console.log(2 === 2); // true
    console.log({} === {}); // false

    So what’s the difference between Object.is and ===?

    In almost all the cases, they are the same.

    But...

    there are two rare cases where the behavior of === is different.

    1. NaN === NaN is false, although they are the same value.
    2. -0 === 0 and 0 === -0 are true, although they are different values.

    First Special Case: NaN

    let width = 0 / 0; // NaN
    let height = width * 2; // NaN
    console.log(width === height); // false

    Remember that NaN === NaN is always false

    However, NaN is the same value as NaN:

    console.log(Object.is(width, height)); // true

    The reason for NaN === NaN being false is largely historical, so I suggest accepting it as a fact of life. You might run into this if you try to write some code that checks a value for being NaN (for example, to print a warning).

    function resizeImage(size) {
      if (size === NaN) {
        // This will never get logged: the check is always false!
        console.log('Something is wrong.');
      }
      // ...
    }

    Second Special Case: -0

    Both 0 === -0 and -0 === 0 are always true:

    let width = 0; // 0
    let height = -width; // -0
    console.log(width === height); // true

    However, 0 is a different value from -0:

    console.log(Object.is(width, height)); // false

    [From Just Javascript]

  • 相关阅读:
    结构型模式のBridge桥梁模式
    创建型模式のBuilder建造者模式
    设计模式的一点思考
    创建型模式のAbstractFactory抽象工厂模式
    初试phoenix
    内网搭建git server
    nsq 学习(三)nsqlookupd
    nsq 学习(二)简单使用
    nsq 学习(一)源码安装nsq
    go学习实践-protobuf
  • 原文地址:https://www.cnblogs.com/Answer1215/p/15161980.html
Copyright © 2011-2022 走看看