不知道为什么if条件没有检测操作数是否是一个对象

时间:2016-09-08 03:06:26

标签: javascript node.js mongodb express mongoose

在这个问题的底部,我有代码:console.log("returnAnonModel -----", returnAnonModel, "typeof : ", typeof returnAnonModel),它记录returnAnonModel是一个对象。我不明白为什么其他条件不会被击中。

首先让我告诉你它记录的内容:

returnAnonModel ----- { _id: 57d0d00c50ed1a2421749a69,
  __v: 0,
  usefulness: [],
  reviews: [] } typeof :  object

问题很简单。你看到了对象,但if条件中的Object.keys(returnAnonModel).length > 0显然不正确。这个物体的长度不应该是4?我不应该在里面看到控制台吗? console.log("***********Anon USER SEARCHING*********************************")没有显示

代码:

    var modelType = undefined;
    Anon.findOne({_id : app.locals.user._id})
    .then(function( returnAnonModel){
        console.log("returnAnonModel -----", returnAnonModel, "typeof : ", typeof returnAnonModel)
        if(err) console.log(err);
        if( Object.keys(returnAnonModel).length > 0 ){
            console.log("***********Anon USER SEARCHING*********************************")
            modelType = Anon
            userOrAnonArr()
        }else{
            console.log("***********USER USER SEARCHING*********************************")
            modelType = User
            userOrAnonArr(modelType)
        }

        function userOrAnonArr(modelType){
        console.log("modelType: ", modelType, " app.locals.user._id : ", typeof app.locals.user._id )
        modelType.findOne({_id : app.locals.user._id}, function(err, returnUser){
            if(err) console.log(err);
            console.log("returnUser : ", returnUser )

有趣的是: 我尝试通过这样做来测试对象的长度: console.log("Object.keys(returnAnonModel).length", Object.keys(returnAnonModel).length)

并返回Object.keys(returnAnonModel).length 10,因此长度为10.我认为mongoose会添加属性。

但是当我做的时候

console.log("Object.keys(returnAnonModel).length", Object.keys(returnAnonModel).toObject().length)

它完全没有记录。为什么呢?

最后修改

这很有效。我一直试图做这个功能。而且我不知道为什么它现在有效,而不是之前。我认为它与控制台有关。

    var modelType = undefined;
    Anon.findOne({_id : app.locals.user._id})
    .then(function( returnAnonModel){
        console.log("*******", returnAnonModel ,"***********88")
        // console.log("returnAnonModel -----", returnAnonModel, "typeof : ", typeof returnAnonModel)
        // console.log("Object.keys(returnAnonModel).length", Object.keys(returnAnonModel.toObject()).length)
        // console.log("returnAnonModel.toObject()---", returnAnonModel.toObject())

        if(returnAnonModel){
            modelType = Anon;
            userOrAnonArr(modelType);
            console.log("*************Anon user found*********************");
        }else{
            modelType = User;
            userOrAnonArr(modelType);
            console.log("*************Anon user NOT found*************")
        }

1 个答案:

答案 0 :(得分:0)

Object.keys()函数不包含对象的所有属性。它仅包含符合以下2个标准的属性:

  1. 该物业必须是"拥有的"属性,意味着Object.keys() 沿着可能存在的任何原型链查看。
  2. 必须使用enumerable属性定义属性。
  3. 从代码中不清楚returnAnonModel对象是如何构建的,但我的猜测是属性不符合列出的两个标准。