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

时间:2016-03-09 22:27:31

标签: javascript

我知道在这结束时我会感到愚蠢,但我一直在努力...

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证明两端都没有空格。该文章表明类型不匹配或其中一个字符串是使用class Vector { x: number; y: number; constructor(x: number, y: number) { this.x = x; this.y = y; } add(that: Vector) { return new Vector(this.x + that.x, this.y + that.y); } } export = Vector; 构造函数创建的,但我不控制生成这些字符串的代码。我该怎么办?

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

1 个答案:

答案 0 :(得分:6)

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