Javascript错误中的两个空字符串不相等
Posted
技术标签:
【中文标题】Javascript错误中的两个空字符串不相等【英文标题】:Two empty strings are not equal in Javascript error 【发布时间】:2020-11-05 13:39:00 【问题描述】:在你不喜欢之前,留下评论告诉我为什么......
其中一个字符串是使用 fs 导入的,另一个是通过代码创建的。我在调试时注意到一些奇怪的字符,但我不确定如何在不修剪的情况下让它通过。我不想修剪,因为这会破坏很多其他检查,间距很重要。
32m 与 31m 是这些字符串不匹配的原因。
更多上下文:
更多上下文:
const originalFile = fs.readFileSync(`./tests/mocks/$filePath.js`, 'utf8');
const classParser = ClassParser.create();
let parseResult = classParser.parse(originalFile, '');
const compiledFile = fs.readFileSync(`./tests/mocks/$filePath.d.ts`, 'utf8');
const typeFileAry = parseResult.typeFile.split('\n');
const compileAry = compiledFile.split('\n');
expect(typeFileAry.length).toBe(compileAry.length);
for(let i = 0; i < typeFileAry.length; ++i)
expect(typeFileAry[i]).toEqual(compileAry[i]);
挖掘 Jest 源代码,看起来他们执行 Object.is(a,b) 并且返回错误。 Object.is('','') 通常返回 true。我不确定这些字符是从哪里来的。
【问题讨论】:
您是否尝试过创建一个最小的、可重现的示例?我发现它有时可以帮助缩小根本原因并找到解决方案。 ***.com/help/minimal-reproducible-example @ShannonMatthews 空字符串大约是我能得到的最窄的。它曾经是一个不相等的巨大字符串,但后来我在新行上拆分字符串以单独比较每一行。Object.is('', '')
将始终返回 true。一定有其他事情发生,比如你有一条不同的线
【参考方案1】:
只有当两个变量具有相同的值和类型时,“===”运算符才会返回 true。如果值相同,可能是类型不匹配。
要对其进行测试,您可以使用 typeof 运算符检查变量的类型。
检查这里: https://developer.mozilla.org/docs/Web/javascript/Reference/Operators/typeof
【讨论】:
都是字符串。 我也在 Jest 中使用 expect(string).toBe(string)。以上是关于Javascript错误中的两个空字符串不相等的主要内容,如果未能解决你的问题,请参考以下文章
创建 SQL 表,其中 DATETIME 或 INT 上的空字符串不默认
SrpingMVC/SpringBoot中restful接口序列化json的时候使用Jackson将空字段,空字符串不传递给前端