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

标签 javascript

我知道最后我会觉得自己很蠢,但我一直在为此苦苦挣扎......

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

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

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

'56e0a2085b89105924963dc3' does not match '56e0a2085b89105924963dc3'

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

  1. 将它们转换成其他东西进行比较? ...糟糕,然后呢?
  2. 抑制或忽略 jshint? ...这就是懒惰的开发人员后来遇到麻烦的原因
  3. 调试更多? ……但是怎么办?我什至不知道如何记录对象的类型(在 JS 中,这似乎是通过奇怪的语言进行的另一次长途旅行)。

最佳答案

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

关于javascript - 为什么这两个字符串是==而不是===,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35903940/

相关文章:

javascript - 在条形图中的条形顶部显示值

javascript - 如何在 JS "onclick"中使用 "setAttribute"运行函数?

javascript - 为什么我的页面在 IE9 的 IE7 模式下可以工作,但在 IE7 本身却不能?

javascript - 当\js是未知命令时,如何在mysql-shell中切换到JS模式?

javascript - Ember 每个循环加倍。使用内部每个循环变量的值绑定(bind)到外部每个循环的变量中名称相同的属性

javascript - 使用 jest 测试提交以获取的 FormData

javascript - 响应地选择紧凑或正常大小的谷歌验证码

javascript - Jquery Ajax Post 不携带变量

javascript - 在 Node.js 中处理 'unmeasured' 的通用方法

javascript - 无法使用 Javascript 访问未命名 JSON 数组中的字段