why does Javascript comparison not work with objects?
我这里有简单的代码。
它的目的是与编写日志的用户一起验证用户,并允许经过验证的用户编辑日志。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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 }); } } }); } |
控制台说:
1 2 | 557c6922925a81930d2ce 'object' 557c6922925a81930d2ce 'object' |
这意味着它们的值相等,类型也相等。
我也试过用
我怀疑需要做点什么来比较物体,但我不知道该怎么做。
JavaScript,当问到compare两个面向,compare的地址的对象,而不是面向锚。所以,是的,你的对象有同样的价值,但是不在同一地方的记忆。 </P >
你可以尝试对提取的ID在变频和compare那(或转化他们的字符串和compare大串)。 </P >
例子: </P >
1 2 3 4 5 | var id_edit = req.user._id, id_post = post.author.user_id; if (id_edit === id_post) { //... } |
或 </P >
1 2 3 | if(req.user._id.toString() === post.author.user_id.toString()) { ... } |
这些人有
你要compare的字符串表示的MongoDB的对象标识符。 </P >
试着这样: </P >
1 | req.user._id.toString() === post.author.user_id.toString() |
这个问题已经被回答的人在这里,但对有明确的目的………………… </P >
If you're using underscore, you can just do
_.isEqual(obj1, obj2);
然而,有没有好的通用通系做这个。为其他类似的问题是这样的方法的细节。 </P >
下面将为你的工作: </P >
1 | req.user._id.toString() === post.author.user_id.toString() |
使用
1 | if(req.user._id.toString() === post.author.user_id.toString()) { |
你可以compare只读置业用JSON对象制作出来的物体的compare:
虽然这是不是要去检查的方法和类的属性,它是扩和probably fastest到执行的比较 </P >