为什么在将空数组与空对象进行比较时,Jasmine toEqual会返回true?

时间:2015-06-10 18:58:23

标签: javascript tdd jasmine

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

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

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

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

但为什么以下是true

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

1 个答案:

答案 0 :(得分:2)

似乎toEqual()将这两个项目视为对象并迭代每个项目的可枚举属性 - 检查它们的值在此过程中是否相等。

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

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

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