Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript!==返回true时应返回false_Javascript_Node.js_Mongodb_Mongoose_Async.js - Fatal编程技术网

Javascript!==返回true时应返回false

Javascript!==返回true时应返回false,javascript,node.js,mongodb,mongoose,async.js,Javascript,Node.js,Mongodb,Mongoose,Async.js,我使用Node.js服务器和async.js处理异步回调,并使用Mongoose连接到我的Mongo数据存储。我试图确定两个对象id是否相等,如果相等,则执行一些代码。但是,比较没有正确执行。代码如下: async.forEachSeries(offerItem.offers, function(currentOfferItemOffer, callback) { Offer.findById(currentOfferItemOffer, function(err, offerItemO

我使用Node.js服务器和async.js处理异步回调,并使用Mongoose连接到我的Mongo数据存储。我试图确定两个对象id是否相等,如果相等,则执行一些代码。但是,比较没有正确执行。代码如下:

async.forEachSeries(offerItem.offers, function(currentOfferItemOffer, callback) {
    Offer.findById(currentOfferItemOffer, function(err, offerItemOffer) {
        if (err) throw err;
        console.log(offerItemOffer._id) // 56953639ea526c8352081fdd
        console.log(offer._id)          // 56953639ea526c8352081fdd
        if (offerItemOffer._id !== offer._id) {
            console.log('offerItemOffer._id !== offer._id') // Is being logged even though it shouldn't

            ....
我很困惑,为什么这样一个简单的比较不能正确执行。当使用“==”-检查两个_-id是否相等时,代码按预期运行,但这在逻辑上是不正确的,因为只有当_-id不相等时才应执行下一个块。任何想法都将不胜感激。谢谢

\u id
上使用
toString()
方法

if (offerItemOffer._id.toString() !== offer._id.toString()) {//...

console.log()
调用
toString()
,因此输出似乎是相同的,因为它被转换为字符串。

看起来
\u id
是对象,而不是字符串。在这种情况下,它们仍然是两个不同的对象。你应该做:

JSON.stringify(offerItemOffer._id) !== JSON.stringify(offer.-id) 
将它们作为字符串进行比较


这里的更多内容

JavaScript有两种类型的不等式运算符。即
=
==

=在比较之前对运算符调用stringify。这意味着在比较时不考虑给定运算符的类型/类

==不调用stringfy。这意味着要考虑运算符的类型/类别

这就是为什么下面的句子产生不同的输出

'1' != 1   // -> false (they are equal since what's being compared is '1' != '1'
'1' !== 1  // -> true  (they are different since what's being compared is a string with an integer)

因此,您可以通过使用
忽略对象类型/类来解决问题=运算符。

而且你确定你没有Mongo objectID,也没有十六进制字符串,你有没有用
typeof检查那些ID,看起来像对象,而不是字符串。
offerItemOffer.\u ID.toString()
应该能很好地解决它。谢谢是的,就是这样。谢谢