2016-09-08 5 views
0

この質問の最後にコードconsole.log("returnAnonModel -----", returnAnonModel, "typeof : ", typeof returnAnonModel)があります。returnAnonModelはオブジェクトです。私はなぜelse条件が当たっていないのか理解していません。オペランドがオブジェクトであるかどうかをif条件が検出しない理由を知らない

まず、私はそれがログに記録するものをお見せしましょう:

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を返します。 私はこれを行うことにより、対象物の長さをテストしてみました私は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*************") 
     } 
+0

オブジェクトには長さがありません(あなたがそれを与えない限り)、あなたはArrayを考えています - ああ、待って、Object.keys(yourobject) 'は長さを持ちます!どのくらい奇妙な –

+0

'.toObejct'は何ですか? –

+0

'if(err)console.log(err);' - errはどこに定義されていますか? –

答えて

0

Object.keys()機能は、オブジェクトのすべてのプロパティをカバーするものではありません。それだけで、次の2つの基準を満たすのプロパティが含まれています

  1. プロパティがObject.keys()が存在する可能性がある任意のプロトタイプチェーンに沿ってない表情をしていることを意味し、「所有」プロパティでなければなりません。
  2. このプロパティは、enumerable属性で定義されている必要があります。

returnAnonModelオブジェクトがどのように構築されたのかはっきりしていませんが、プロパティが両方の条件を満たすとは限りません。

関連する問題