javascript – 为什么qUnit的assert.equal认为这两个字符串在IE中是不同的?

我正在使用另一个开发人员编写的一些qUnit测试,并且在理解为什么IE中的特定测试失败时遇到了一些麻烦.

有一个函数可以将许多不同格式的字符串日期转换为UTC日期,它似乎正常运行.但是,我在IE中测试时遇到了一些问题.

为了测试它,我正在返回函数(这是一个数字而不是标准的格式化日期),从中创建一个新日期,然后使用JavaScript的toLocaleString()函数来获取一个我可以与另一个字符串进行比较的字符串我建立.测试的一个例子如下;减去对函数的调用,我已经用我得到的输出替换了对函数的调用.

var expectedResult = "11/11/2000 12:56:00";
var actualResult = new Date(973947360000).toLocaleString():
assert.equal(expectedResult, actualResult);

这失败但我不明白为什么,我没有使用deepEqual(),并且类型是相同的(我已经调试和检查).我认为这可能取决于IE的编码,但我不确定1,如何确定这种情况和2,绕过它/有效地测试它.值得注意的是,这个测试在FF和Chrome中都很好,尽管Chrome在日期结束时附加了“PM”.

任何帮助将不胜感激.

以下是IE输出的快照.

qUnit output difference

最佳答案 看到没有其他人提出解释我将简单地提交我的解决方案作为答案.

看起来Internet Explorer中的.toLocaleString()将两个日期之间的空间编码与JavaScript初始化字符串的方式不同.使用以下代码替换.toLocaleString()空间,并允许有效评估2个值的相等性.

.replace(/[^ -~]/g, '');

因为我只需要知道显示的日期与输入日期具有相同的值,这是可以接受的.

点赞