zoukankan      html  css  js  c++  java
  • 判断两个值是否相同——Object.is( )

    原文地址:

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/is

     

    用法

      Object.is(value1, value2);

      返回一个boolean

     

    说明

      Object.is()用于确定两个值是否相同,两个值相同有如下的几种情况:

    1. 都是 undefined

    2. 都是 null

    3. 都是 truefalse

    4. 是长度相同的两个字符串,并且每个序号对应的字符相同

    5. 相同的两个对象(两个对象有相同的引用地址)

    6. 两个相同的数字:

      • 都是 +0

      • 都是 -0

      • 都是 NaN

      • 都不是0且不是NaN,并且值相同

      Object.is与 ==运算符得到的结果不一样。==会在比较之前对符号两边的值进行强制类型转换(当他们类型不同时)。

      Object.is与 ===运算符得到的结果也不一样。- 0 === + 0true,而Number.NaN === NaNfalse

     

    函数实现

    if (!Object.is) {
      Object.is = function(x, y) {
        // SameValue algorithm
        if (x === y) { // Steps 1-5, 7-10
          // Steps 6.b-6.e: +0 != -0
          return x !== 0 || 1 / x === 1 / y;
        } else {
          // Step 6.a: NaN == NaN
          return x !== x && y !== y;
        }
      };
    }

     

    使用示例

    Object.is('foo', 'foo');     // true
    Object.is(window, window);   // true
    ​
    Object.is('foo', 'bar');     // false
    Object.is([], []);           // false
    ​
    var foo = { a: 1 };
    var bar = { a: 1 };
    Object.is(foo, foo);         // true
    Object.is(foo, bar);         // false
    ​
    Object.is(null, null);       // true
    ​
    // Special Cases
    Object.is(0, -0);            // false
    Object.is(-0, -0);           // true
    Object.is(NaN, 0/0);         // true

     

    兼容性

      不支持ie

     

    比较 ===== 、Object.is、 SameValueZero

    xy=====Object.isSameValueZero
    undefined undefined true true true true
    null null true true true true
    true true true true true true
    false false true true true true
    'foo' 'foo' true true true true
    0 0 true true true true
    +0 -0 true true false true
    +0 0 true true true true
    -0 0 true true false true
    0 false true false false false
    "" false true false false false
    "" 0 true false false false
    '0' 0 true false false false
    '17' 17 true false false false
    [1, 2] '1,2' true false false false
    new String('foo') 'foo' true false false false
    null undefined true false false false
    null false false false false false
    undefined false false false false false
    { foo: 'bar' } { foo: 'bar' } false false false false
    new String('foo') new String('foo') false false false false
    0 null false false false false
    0 NaN false false false false
    'foo' NaN false false false false
    NaN NaN false false true true
  • 相关阅读:
    emulate sh
    postmaster.c 中的 ListenAddresses
    PostgreSQL的postmaster的fork动作验证
    NotifyMyFrontEnd 函数背后的数据缓冲区(三)
    对${ZSH_VERSION+set}的验证
    微软正准备一个简易的Rootkit清除方案 助用户打补丁 狼人:
    创新与安全:云计算的两只跷跷板 狼人:
    苹果禁止iPhone黑客访问App Store应用商店 狼人:
    春节不回家 单身留守族“拼饭”“拼玩” 狼人:
    僵尸侵入全球 袭击者或为东欧黑帮 狼人:
  • 原文地址:https://www.cnblogs.com/chaoxiZ/p/13084956.html
Copyright © 2011-2022 走看看