关于node.js:为什么Javascript比较不能与对象一起使用?

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()) {
    ...
}

这些人有toString()蒙戈,但也有它的自己的方法objectids。。。。。。。你可以使用: </P >

post.author.user_id.equals(req.user._id) </P >


你要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()


使用toString()是两部objects。。。。。。。 </P >

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


你可以compare只读置业用JSON对象制作出来的物体的compare: JSON.stringify(obj1) === JSON.stringify(obj2) </P >

虽然这是不是要去检查的方法和类的属性,它是扩和probably fastest到执行的比较 </P >