JavaScript 对象 is() 方法
Object.is()
方法检查两个值是否相同。
示例
let obj1 = { a: 1 };
// 将对象与其自身进行比较
console.log(Object.is(obj1, obj1));
// 输出: 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()
// 值相同的对象
console.log(Object.is("JavaScript", "JavaScript"));
// 输出: true
// 值不同的对象
console.log(Object.is("JavaScript", "javascript"));
// 输出: false
// 比较null值
console.log(Object.is(null, null));
// 输出: true
在上面的示例中,我们检查传递给is()
方法的两个参数是否相同。
示例2:使用自定义对象的is()
// 创建一个对象
let obj1 = { a: 1 };
// 创建另一个对象
// 与obj1具有相同的属性
let obj2 = { a: 1 };
// 返回true,因为两个参数
// 具有相同的引用
console.log(Object.is(obj1, obj1));
// 输出: true
// 返回false,因为obj1和
// obj2具有不同的引用
console.log(Object.is(obj1, obj2));
// 输出: false
在上面的示例中,我们使用is()
方法检查obj1和obj2是否具有相同的值。
尽管共享相同的属性和值,我们得到的输出是false
,因为obj1和obj2具有不同的引用。
相比之下,将obj1与其自身进行比较得到true
,因为引用是相同的。
示例3:is()的特殊情况
// 特殊情况
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()
则相反。
推荐阅读: