JavaScript Object.is()

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() 方法检查 obj1obj2 是否具有相同的值。

尽管它们具有相同的属性和值,但我们得到 false 的输出,因为 obj1obj2 具有不同的引用。

相比之下,将 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 的一些怪异行为。它们不必死记硬背,实际上会随着我们对语言的熟悉而掌握。

注意事项

  1. == 运算符在(如果类型不同)比较之前会对两侧应用各种类型转换,而 Object.is() 则不会。
  2. === 运算符将数字值 -0+0 视为相等,并将 Number.NaN 视为不等于 NaN,而 Object.is() 则相反。

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战