为什么console.log()显示数组,但typeof返回'object'?

时间:2016-01-02 16:16:26

标签: javascript node.js mongodb mongoose

这与mongoose find()操作的结果有关。代码

console.log('apparently this is an ' + typeof campaign.advertGroups, campaign.advertGroups);

导致以下输出:

apparently this is an object [ { adverts: [ [Object], [Object], [Object] ] } ]

campaign.advertGroups不像数组一样(即长度属性未定义等等),即使它是Mongo集合中的数组。

有人可以对此有所了解吗?感觉很愚蠢,我必须错过一些非常明显的东西。

3 个答案:

答案 0 :(得分:2)

javascript的一个奇怪的行为是typeof []是一个对象。你有多种方法可以检查对象是不是一个数组。

其中一个是:

if(Array === someobj.constructor)
{
  console.log('Its an array');
}

答案 1 :(得分:0)

  

@jamen,但它不像数组,因为我无法访问length属性,或通过campaign.advertGroups [0](undefined)或类似访问元素。这基本上就是我遇到的真正问题。

它看起来像一个奇怪的数组。我不确定问题究竟是什么,但您可以尝试调用height将其转换为真实数组:

.slice

答案 2 :(得分:0)

已解决:这是我的Mongoose模式的一个问题,特别是将数组定义为具有嵌套对象的对象。 Javascript的数组技术实际上是糖衣涂层对象混淆了这个问题,导致console.log和typeof呈现看似相互冲突的信息;感谢评论者提供的那一块拼图!