为什么 Jasmine toEqual 在比较空数组和空对象时返回 true

Why does Jasmine toEqual return true when comparing empty array with empty object?

本文关键字:对象 返回 true 数组 toEqual 比较 为什么 Jasmine      更新时间:2023-09-26

我明白为什么下面返回错误...

expect({}).toBe({});

我明白为什么以下内容返回 true...

expect({}).toEqual({});

但是为什么以下true

expect([]).toEqual({});

> 看起来toEqual()将这两个项目都视为对象,并迭代每个项目的可枚举属性 - 检查它们的值是否相等。

换句话说,它似乎将数组视为常规 JS 对象,使用索引作为具有相应值的"属性"。只要数组中的索引/值对与对象中的属性/值对匹配,Jasmine 显然会将它们视为相等。

例如,以下内容(令人惊讶地)成功...

  var myArray = ['a', 'b'];
  var myObj = {
    1: 'b',
    0: 'a'
  };
  expect(myArray).toEqual(myObj);