茉莉期望不匹配数组结果

时间:2016-01-15 15:09:27

标签: javascript arrays jasmine expectations

我正在尝试以下代码:

describe("array deletion", function () {
    it("leaves a hole in middle", function () {
        var array = ['one','two','three'];
        delete array[1]; //'two' deleted
        expect(array).toEqual(['one',undefined,'three']);
    });
});

这种期望失败了,但为什么呢?不应该相等吗?

1 个答案:

答案 0 :(得分:0)

具有3个元素的数组之间的JavaScript存在差异,其中一个元素是undefined,而数组只有2个元素。例如

var a = [1,2,3];
delete a[1];
a.forEach(function(x) { console.log(x); });
// writes 1 3

[1,undefined,3].forEach(function(x) { console.log(x); })
// writes 1 undefined 3

1 in a
// returns false

1 in [1,undefined,2]
// returns true

来源始终在您身边,如果您查看toEquals匹配器代码,您会发现它使用以下源文件中的eq函数(它有点冗长所以我只提供链接,在底部是比较对象和数组的部分:https://github.com/jasmine/jasmine/blob/79206ccff5dd8a8b2970ccf5a6429cdab2c6010a/src/core/matchers/matchersUtil.js)。