2016-03-09 3 views
5

Я знаю, что я буду чувствовать себя немым в конце, но я боролся с этим ...Почему эти две строки == но не ===

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

это работает , сравнивая две строки, которые являются одинаковыми и находят совпадение. Но мой jshint говорит мне использовать этот оператор ===, который, как я понимаю (from here), означает, что типы также проверяются.

Подставляя ===, мой тест терпит неудачу, генерируя вывод консоли;

«56e0a2085b89105924963dc3» не совпадает с «» 56e0a2085b89105924963dc3

Я думаю, что клещи ' доказывают, что нет никаких пробелов на обоих концах. В этой статье указывается, что либо типы не совпадают, либо что одна из строк была создана с помощью конструктора new String, но я не управляю кодом, который их генерирует. Что мне делать?

  1. преобразовать их в нечто другое для сравнения? ... yuck, и к чему?
  2. подавлять или игнорировать jshint? ... вот как ленивый разработчик попадает в беду позже
  3. отладка еще? ... но как? Я даже не знаю, как записывать тип объекта (в JS, который, кажется, является еще одной длинной поездкой через странную странность).
+3

Попробуйте сделать «typeof» на обоих, я предполагаю, что один из них - это объект или буфер, возможно, ObjectID или аналогичный, поскольку Mongo обычно использует '_id' для ObjectID's – adeneo

+0

, если вам действительно нужно' === ' вы можете сделать это: 'if (String (user._id) === String (req.params.id)) {' –

+0

Да. typeof - ценный совет, два типа - «objecttype» и «string». @DmitriyLoskutov, имеет ли String (x) объект objecttype в строку? – user1272965

ответ

6

Похоже, вы используете mongodb для получения объектаId (я предполагаю из синтаксиса). Вы должны проверить, является ли user._id фактически строкой вместо объекта ObjectId. Вы можете приостановить выполнение или просто использовать оператор typeof, чтобы увидеть, действительно ли user._id является строкой.

+0

Спасибо. Ты прав. Различные типы. Я не понимал, что ObjectId - вещь. Каков правильный способ получить строчную версию идентификатора объекта? – user1272965

+0

А .. Найди его! https://docs.mongodb.org/manual/reference/method/ObjectId.toString/ Большое спасибо! SO говорит, что я должен ждать 4 минуты, чтобы согласиться. – user1272965

Смежные вопросы