我正在尝试以下代码:
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']);
});
});
这种期望失败了,但为什么呢?不应该相等吗?
答案 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)。