試一試
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)
引數
返回值
一個布林值,指示兩個引數是否為相同值。
描述
Object.is() 用於確定兩個值是否為相同值。當以下任一情況成立時,兩個值被認為是相同的:
- 兩者都是
undefined - 兩者都是
null - 兩者都是
true或兩者都是false - 兩者都是相同長度且字元相同、順序一致的字串
- 兩者是同一個物件(意味著兩個值在記憶體中引用同一個物件)
- 兩者都是具有相同數值的 BigInt
- 兩者是引用相同符號值的 Symbol
- 兩者都是數字,並且
Object.is() 不等同於 == 運算子。== 運算子在比較(如果它們型別不同)之前會對兩側的值進行各種型別轉換,從而產生諸如 "" == false 為 true 之類的結果。但 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 |
瀏覽器相容性
載入中…