Object.is()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 2015 年 9 月以来,该特性已在各大浏览器中可用。

Object.is() 静态方法用于确定两个值是否为相同值

试一试

console.log(Object.is("1", 1));
// Expected output: false

console.log(Object.is(NaN, NaN));
// Expected output: true

console.log(Object.is(-0, 0));
// Expected output: false

const obj = {};
console.log(Object.is(obj, {}));
// Expected output: false

语法

js
Object.is(value1, value2)

参数

value1

要比较的第一个值。

value2

要比较的第二个值。

返回值

一个布尔值,指示两个参数是否为相同值。

描述

Object.is() 用于确定两个值是否为相同值。当以下任一情况成立时,两个值被认为是相同的:

  • 两者都是 undefined
  • 两者都是 null
  • 两者都是 true 或两者都是 false
  • 两者都是相同长度且字符相同、顺序一致的字符串
  • 两者是同一个对象(意味着两个值在内存中引用同一个对象)
  • 两者都是具有相同数值的 BigInt
  • 两者是引用相同符号值的 Symbol
  • 两者都是数字,并且
    • 两者都是 +0
    • 两者都是 -0
    • 两者都是 NaN
    • 或者两者都是非零、非 NaN 并且具有相同的值

Object.is() 不等同于 == 运算符。== 运算符在比较(如果它们类型不同)之前会对两侧的值进行各种类型转换,从而产生诸如 "" == falsetrue 之类的结果。但 Object.is() 不会对任何值进行类型转换。

Object.is()等同于 === 运算符。Object.is()=== 之间的唯一区别在于它们对带符号零和 NaN 值的处理方式。=== 运算符(以及 == 运算符)将数字值 -0+0 视为相等,但将 NaN 视为不相等。

示例

使用 Object.is()

js
// Case 1: Evaluation result is the same as using ===
Object.is(25, 25); // true
Object.is("foo", "foo"); // true
Object.is("foo", "bar"); // false
Object.is(null, null); // true
Object.is(undefined, undefined); // true
Object.is(window, window); // true
Object.is([], []); // false
const foo = { a: 1 };
const bar = { a: 1 };
const sameFoo = foo;
Object.is(foo, foo); // true
Object.is(foo, bar); // false
Object.is(foo, sameFoo); // true

// Case 2: Signed zero
Object.is(0, -0); // false
Object.is(+0, -0); // false
Object.is(-0, -0); // true

// Case 3: NaN
Object.is(NaN, 0 / 0); // true
Object.is(NaN, Number.NaN); // true

规范

规范
ECMAScript® 2026 语言规范
# sec-object.is

浏览器兼容性

另见