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错误中的两个空字符串不相等的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中值在各种场景的转换规则

创建 SQL 表,其中 DATETIME 或 INT 上的空字符串不默认

hive的空字符串与null

如何判断既不为null也不为空字符串

SrpingMVC/SpringBoot中restful接口序列化json的时候使用Jackson将空字段,空字符串不传递给前端

Java 处理不可见特殊字符的坑