Я знаю, что я буду чувствовать себя немым в конце, но я боролся с этим ...Почему эти две строки == но не ===
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
, но я не управляю кодом, который их генерирует. Что мне делать?
- преобразовать их в нечто другое для сравнения? ... yuck, и к чему?
- подавлять или игнорировать jshint? ... вот как ленивый разработчик попадает в беду позже
- отладка еще? ... но как? Я даже не знаю, как записывать тип объекта (в JS, который, кажется, является еще одной длинной поездкой через странную странность).
Попробуйте сделать «typeof» на обоих, я предполагаю, что один из них - это объект или буфер, возможно, ObjectID или аналогичный, поскольку Mongo обычно использует '_id' для ObjectID's – adeneo
, если вам действительно нужно' === ' вы можете сделать это: 'if (String (user._id) === String (req.params.id)) {' –
Да. typeof - ценный совет, два типа - «objecttype» и «string». @DmitriyLoskutov, имеет ли String (x) объект objecttype в строку? – user1272965