2017-05-08 71 views
0

我下面的函數,我比較兩個相等的值(如顯示在控制檯,但回報是假的......ES6。如何正確比較===運算符?

function removeGroup(req, res, next) { 
     const user = req.user; 
     const found = user.groups.some((obj, idx) => { 
     console.log('obj._id: ', obj._id); 
     console.log('req.params.groupId: ', req.params.groupId); 
     if (obj._id === req.params.groupId) { 
      console.log('equal'); 
      user.groups.splice(idx, 1); 
      return true; 
     } 
     console.log('not equal'); 
     return false; 
     }); 
     if (found) { 
     user.save() 
      .then(savedTable => res.json(savedTable)) 
      .catch(e => next(e)); 
     } else { 
     res.status(404); 
     res.json({ message: 'Group Not Found' }); 
     } 
    } 

這裏是.LOG導致控制檯

obj._id: 59109bc44ea63331151b9327 
    req.params.groupId: 59109bc44ea63331151b9327 
    not equal 
+3

顯然,他們是不相等的。檢查他們的類型(使用'typeof')。 – Bergi

+1

@Bergi說了什麼,'=='和'==='之間的區別在於它們必須是相同的類型。如果'=='返回false,那麼還有其他事情正在進行。 –

+1

[比較mongoose _id和字符串](http://stackoverflow.com/q/11637353/1048572)可能的重複?不幸的是,你沒有提供任何有關這些對象的信息。 – Bergi

回答

1

好在JavaScript中的做法是始終使用===而不是==避免強制(隱式類型轉換)。爲了記錄在案,你也可以使用ES6 Object.is() ...

那麼,爲什麼你的代碼是不是工作?因爲你沒有提供足夠的細節問題,但是從我在評論中看到的內容,我想你會在下面找到一個明確的解釋:

obj._idreq.params.groupId必須嚴格等於類型。這對原始值(字符串,數字,布爾值,...)來說很好,但問題是,在JavaScript中,你不能像這樣比較對象。在這種語言中,對象通過參考進行比較。這意味着如果一個對象不是同一個實例,即使它具有完全相同的屬性,它也永遠不會與另一個對象相等。

let ref = {}; 
 

 
// false 
 
console.log({} == {}); 
 
console.log({} === {}); 
 
console.log(Object.is({}, {})); 
 

 
// true 
 
console.log(ref == ref); 
 
console.log(ref === ref); 
 
console.log(Object.is(ref, ref));

+0

非常感謝您的反饋...並提示ES6對象 – erwin