为什么Javascript比较不能用于对象?

我在这里有简单的代码。

其目的是validation用户与写博客的用户,并允许经过validation的用户编辑post。

exports.edit = function(req, res){ Post.findById(req.params.post_id, function(err, post){ if(err){ return res.json({ type:false, message:"error!" }); }else if(!post){ return res.json({ type:false, message:"no post with the id" }) }else{ console.log(req.user._id, typeof req.user._id); console.log(post.author.user_id, typeof post.author.user_id); if(req.user._id === post.author.user_id){ // doesn't work!! return res.json({ type:false, message:"notAuthorized" }); }else{ return res.json({ type:true, message:"it works", data:post }); } } }); } 

控制台说:

 557c6922925a81930d2ce 'object' 557c6922925a81930d2ce 'object' 

这意味着它们在价值上是平等的,而且在types上也是相同的

我也尝试过== ,但这也行不通。

我怀疑需要做些什么来比较对象,但我不知道我应该做什么。

当Javascript要求比较两个对象时,比较对象的地址,而不是对象本身。 所以是的,你的对象有相同的价值,但不在内存中的同一个地方。

您可以尝试提取新variables中的id并比较(或将它们转换为string并比较string)。

例子:

 var id_edit = req.user._id, id_post = post.author.user_id; if (id_edit === id_post) { //... } 

要么

 if(req.user._id.toString() === post.author.user_id.toString()) { ... } 

人们提到了toString() ,但是mongo也有自己的ObjectIds方法。 您可以使用:

post.author.user_id.equals(req.user._id)

您必须比较mongodb标识符对象的string表示forms。

尝试这个:

 req.user._id.toString() === post.author.user_id.toString() 

在两个objects上使用toString()

 if(req.user._id.toString() === post.author.user_id.toString()) { 

下面将为你工作:

 req.user._id.toString() === post.author.user_id.toString() 

这个问题已经在这里得到解答,但是为了明确的目的…

如果你使用下划线 ,你可以做_.isEqual(obj1, obj2);

但是,这样做没有一个好的一般方法。 有关详细信息,请阅读SO上的其他类似问题。

JSON.stringify(obj1) === JSON.stringify(obj2)你可以比较只有属性通过使json对象的对象进行比较:

虽然它不会去检查属性的方法和types,但是实现它是最简单和可能最快的比较