为什么这两个字符串是==而不是===

Why are these two strings == but not ===

本文关键字:字符串 两个 为什么      更新时间:2023-09-26

我知道最后我会感到愚蠢,但我一直在为此苦苦挣扎......

if (user._id == req.params.id) {
    console.log("match");           
} else {
    console.log("'" + user._id + "' does not match '" + req.params.id + "'");
}

这有效,比较两个相同的字符串并找到匹配项。 但是我的jshint告诉我使用这个运算符===我理解(从这里)意味着类型也被检查。

替换我的测试失败===,生成控制台输出,例如;

'56e0a2085b89105924963dc3' 不匹配 '56e0a2085b89105924963dc3'

我认为勾号'证明两端都没有空格。 该文章指出类型不匹配,或者其中一个字符串是使用 new String 构造函数创建的,但我不控制生成这些类型的代码。 我该怎么办?

  1. 将它们转换为其他东西进行比较? ...哎呀,为了什么?
  2. 抑制还是忽略 jshint?这就是懒惰的开发人员以后遇到麻烦的方式
  3. 调试更多? ...但是怎么做呢? 我什至不知道如何记录对象的类型(在JS中,这似乎是通过语言怪异的另一次长途旅行)。

看起来你正在使用mongodb来获取objectId(我从语法中假设)。您应该检查user._id是否实际上是一个字符串而不是"ObjectId"对象。您可以暂停执行或仅使用 typeof 运算符查看user._id是否真的是一个字符串。