试一试
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 |
浏览器兼容性
加载中…