Object.is()
方法用于检查两个值是否相等。
示例
let obj1 = { a: 1 };
// comparing the object with itself
console.log(Object.is(obj1, obj1));
// Output: true
is() 语法
is()
方法的语法是:
Object.is(value1, value2)
在这里,is()
是一个静态方法。因此,我们需要使用类名 Object
来访问该方法。
is() 参数
is()
方法接受:
- value1 - 第一个要比较的值。
- value2 - 第二个要比较的值。
is() 返回值
is()
方法返回一个 Boolean
值:
true
- 如果两个参数具有相同的值。false
- 如果两个参数没有相同的值。
相同值的条件
两个值相同,当满足以下条件之一时:
- 两者均为
undefined
- 两者均为
null
- 两者均为
true
或两者均为false
- 两者均为相同长度且字符相同、顺序相同的字符串。
- 两者是同一个对象(意味着两个对象具有相同的引用)。
- 两者都是数字,并且
- 两者均为 +0
- 两者均为 -0
- 两者均为
NaN
- 或者两者都不是零、都不是
NaN
,并且两者具有相同的值。
示例 1:JavaScript Object.is()
// objects with same values
console.log(Object.is("JavaScript", "JavaScript"));
// Output: true
// objects with different values
console.log(Object.is("JavaScript", "javascript"));
// Output: false
// compare null values
console.log(Object.is(null, null));
// Output: true
在上面的示例中,我们检查了传递给 is()
方法的两个参数是否相同。
示例 2:is() 与自定义对象
// create an object
let obj1 = { a: 1 };
// create another object
// with identical properties as obj1
let obj2 = { a: 1 };
// returns true because both arguments
// have the same reference
console.log(Object.is(obj1, obj1));
// Output: true
// returns false because obj1 and
// obj2 have different references
console.log(Object.is(obj1, obj2));
// Output: false
在上面的示例中,我们使用 is()
方法检查 obj1 和 obj2 是否具有相同的值。
尽管它们具有相同的属性和值,但我们得到 false
的输出,因为 obj1 和 obj2 具有不同的引用。
相比之下,将 obj1 与自身进行比较会得到 true
,因为引用是相同的。
示例 3:is() 与特殊情况
// Special Cases
console.log(Object.is([], [])); // false
console.log(Object.is(0, -0)); // false
console.log(Object.is(-0, -0)); // true
console.log(Object.is(NaN, 0 / 0)); // true
以上示例有助于测试 JavaScript 的一些怪异行为。它们不必死记硬背,实际上会随着我们对语言的熟悉而掌握。
注意事项
==
运算符在(如果类型不同)比较之前会对两侧应用各种类型转换,而Object.is()
则不会。===
运算符将数字值 -0 和 +0 视为相等,并将 Number.NaN 视为不等于NaN
,而Object.is()
则相反。
另请阅读