此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
Object.is()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年9月.
Object.is() 静态方法确定两个值是否为相同值。
In this article
尝试一下
console.log(Object.is("1", 1));// Expected output: falseconsole.log(Object.is(NaN, NaN));// Expected output: trueconsole.log(Object.is(-0, 0));// Expected output: falseconst obj = {};console.log(Object.is(obj, {}));// Expected output: false语法
js
Object.is(value1, value2)参数
返回值
一个布尔值,指示两个参数是否为相同的值。
描述
Object.is() 确定两个值是否为相同值。如果以下其中一项成立,则两个值相同:
- 都是
undefined - 都是
null - 都是
true或者都是false - 都是长度相同、字符相同、顺序相同的字符串
- 都是相同的对象(意味着两个值都引用了内存中的同一对象)
- 都是BigInt 且具有相同的数值
- 都是symbol 且引用相同的 symbol 值
- 都是数字且
Object.is() 与== 运算符并不等价。== 运算符在测试相等性之前,会对两个操作数进行类型转换(如果它们不是相同的类型),这可能会导致一些非预期的行为,例如"" == false 的结果是true,但是Object.is() 不会对其操作数进行类型转换。
Object.is() 也不等价于=== 运算符。Object.is() 和=== 之间的唯一区别在于它们处理带符号的 0 和NaN 值的时候。=== 运算符(和== 运算符)将数值-0 和+0 视为相等,但是会将NaN 视为彼此不相等。
示例
>使用 Object.is()
js
// 案例 1:评估结果和使用 === 相同Object.is(25, 25); // trueObject.is("foo", "foo"); // trueObject.is("foo", "bar"); // falseObject.is(null, null); // trueObject.is(undefined, undefined); // trueObject.is(window, window); // trueObject.is([], []); // falseconst foo = { a: 1 };const bar = { a: 1 };const sameFoo = foo;Object.is(foo, foo); // trueObject.is(foo, bar); // falseObject.is(foo, sameFoo); // true// 案例 2: 带符号的 0Object.is(0, -0); // falseObject.is(+0, -0); // falseObject.is(-0, -0); // true// 案例 3: NaNObject.is(NaN, 0 / 0); // trueObject.is(NaN, Number.NaN); // true规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.is> |
浏览器兼容性
参见
core-js中Object.is的 Polyfill- JavaScript 中的相等性判断——三种内置相等性工具的比较