Object.is()

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

试用

语法

js
Object.is(value1, value2)

参数

value1

要比较的第一个值。

value2

要比较的第二个值。

返回值

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

描述

Object.is() 确定两个值是否相同的值。如果以下任一条件成立,则两个值相同

  • 两者都是undefined
  • 两者都是null
  • 两者都是 true 或两者都是 false
  • 两者都是相同长度的字符串,字符顺序相同
  • 两者都是同一个对象(表示两个值都引用内存中的同一个对象)
  • 两者都是BigInt,数值相同
  • 两者都是符号,引用同一个符号值
  • 两者都是数字,且
    • 两者都是 +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 语言规范
# sec-object.is

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅