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

瀏覽器相容性

另見