Null 到小写在本地失败,但在暂存时失败。帮我理解?

Null to lowercase fails on local, but not on staging. Help me to understand?

提问人:Volodymyr RT 提问时间:11/7/2023 最后编辑:Volodymyr RT 更新时间:11/8/2023 访问量:39

问:

面对我无法理解的问题,它让我心痒痒的。我有一个代码,运行了 3 周。然后,无论出于何种原因,它今天开始崩溃并显示错误。这在技术上是正确的行为。

问题在于,使用相同的数据和相同的代码,它可以正常工作,在暂存环境中发生零崩溃。Unit.title 在暂存和本地的多个项目中为 null。它以前在我当地的运行良好。

我已经隐藏了我所有的更改,并像登台一样切换到分支 - 仍然继续崩溃。

如何追踪差异?如何检查?其他开发人员没有它。

代码本身非常简单:

          let costumeTitle = siteMap[data][unit].title;
          // if(!costumeTitle){
          //   console.log('unit', unit);
          //   console.log(data);
          //   costumeTitle = 'Broken title!'
          // }
          const lowerCaseTitle = costumeTitle.toLowerCase();

在某些情况下,title 确实是 null。它在 React 中抛出错误是正确的。但为什么是现在,为什么不是以前?3周,一切都很好。在 Stagin 上,数据是相同的。并且也有空作为标题,但它有效!

澄清一下:

IN 暂存和本地数据是相同的。它们都具有 unit.title、等于 null 或 undefined。

javascript reactjs 错误处理 null

评论

0赞 Kaddath 11/7/2023
暂存环境中的某些东西是否有可能将值转换为字符串?数据库有什么区别,通信协议可能是什么?null"null"
0赞 Volodymyr RT 11/8/2023
我将编辑原始帖子。在 stagin 环境中,就像在本地一样,有标题为 null 的 ara 数据。

答:

1赞 2 revsT.J. Crowder #1

在某些情况下,title 确实是 null。

然后会抛出,因为你无法访问 上的属性。costumeTitle.toLowerCase()toLowerCasenull

但为什么是现在,为什么不是以前?

因为它以前从未出现过,所以巧合的是,当该代码运行时,它总是非。这是您不会收到错误的唯一原因。titlenull


旁注:如果要设置为 when is ,可以使用可选的链接 () 和无效合并 () 来实现:lowerCaseTitlenullcostumeTitlenull?.??

const lowerCaseTitle = costumeTitle?.toLowerCase() ?? null;
//    ^−− will be a string if costumeTitle is string, or null if
//        costumeTitle is null (or undefined)

如果 to be 而不是 when is 是可以的,则不需要无效合并:lowerCaseTitleundefinednullcostumeTitlenull

const lowerCaseTitle = costumeTitle?.toLowerCase();
//    ^−− will be a string if costumeTitle is string, or undefined
//        if costumeTitle is null (or undefined)

评论

0赞 Volodymyr RT 11/8/2023
为了澄清起见,我已经编辑了我的原始帖子。你写的是正确的,但正如我所提到的——数据是一样的。在暂存和本地都有 unit.title 作为 null。问题是为什么暂存上的 null 不会引发错误。
0赞 T.J. Crowder 11/8/2023
@VolodymyrRT - 再次:如果在 is 时执行代码,则会出现错误。那里没有回旋余地或微妙之处,它会发生。:-)再说一遍:如果你在暂存时没有看到这个错误,那是因为该代码从未在暂存时运行过。costumeTitle.toLowerCase()costumeTitlenullnull
0赞 Volodymyr RT 11/9/2023
再说一遍,我知道这一点。相信我。这就是我发布它的原因。相同的代码,相同的数据,2 种不同的行为。
0赞 T.J. Crowder 11/9/2023
@VolodymyrRT - 所以在我看来,FWIW,你最好的选择是在调试中专注于:A)如果它在数据库中,为什么我不会在这个代码中得到空值?或者 B) 为什么在暂存时不遵循此代码路径?这将有助于你弄清楚发生了什么,而不是专注于你知道没有发生的事情。祝你好运!:-)