mozilla
您的搜索结果

    Object.is()

    该特性处于 ECMAScript 6 规范草案中,目前的实现在未来可能会发生微调,请谨慎使用。

    概述

    Object.is() 方法用来判断两个值是否是同一个值。

    语法

    Object.is(value1, value2);

    参数

    value1
    需要比较的第一个值。
    value2
    需要比较的第二个值。

    返回值

    返回一个布尔值表明传入的两个值是否是同一个值。

    描述

    Object.is() 会在下面这些情况下认为两个值是相同的:

    • 两个值都是 undefined
    • 两个值都是 null
    • 两个值都是 true 或者都是 false
    • 两个值是由相同个数的字符按照相同的顺序组成的字符串
    • 两个值指向同一个对象
    • 两个值都是数字并且
      • 都是正零 +0
      • 都是负零 -0
      • 都是 NaN
      • 都是除零和 NaN 外的其它同一个数字

    这种相等性判断逻辑和传统的 == 运算符所用的不同,== 运算符会对它两边的操作数做隐式的类型转换(如果它们是不同类型的值的话),然后才进行相等性比较,(所以才会有类似 "" == falsetrue 的现象),但 Object.is 不会做这种类型转换。

    而且,即便严格相等运算符 === 不会对操作数进行类型转换,但它不能区分两个不同的数字 -0+0,还会把两个 NaN 看成是不相等的。

    示例

    Object.is('foo', 'foo');     // true
    Object.is(window, window);   // true
    
    Object.is('foo', 'bar');     // false
    Object.is([], []);           // false
    
    var test = { a: 1 };
    Object.is(test, test);       // true
    
    Object.is(null, null);       // true
    
    // 两个特例,=== 也没法判断的情况
    Object.is(0, -0);            // false
    Object.is(NaN, 0/0);         // true
    

    Polyfill

    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;
        }
      };
    }
    

    规范

    规范名称 规范状态 备注
    ECMAScript 6 (ECMA-262)
    Object.is
    Release Candidate 首次加入规范

    浏览器兼容性

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Basic support 30.0.1599.114 22 (22) 未实现 (Yes) 未实现
    Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Basic support 未实现 ? 22.0 (22) 未实现 未实现 未实现

    相关链接

    文档标签和贡献者

    Contributors to this page:
    最后编辑者: ziyunfei,