跳到主要内容

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的一些奇怪行为。它们不需要记住,实际上在我们熟悉语言时会逐渐掌握。

备注:

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

推荐阅读: