在Javascript上发送数组值,但它显示为[object Object]

时间:2017-05-10 12:03:34

标签: javascript angularjs arrays node.js express

我计算数据库的结果数量并发送为' TotalItems'

mysql_crawl.query('SELECT COUNT(*) FROM `catalogsearch_fulltext` WHERE MATCH(data_index) AGAINST("'+n+'") ', function(error, count) {
    var r = count[0];
    var totalItems = r,
    res.render('result.html', {
                totalItems: totalItems
                })
    });

我尝试在r上运行console.log,结果是

RowDataPacket { 'COUNT(*)': 25 }

但是当我运行<%totalItems%>在javascript上,它显示为

[object Object]

如何将对象显示为数字?

4 个答案:

答案 0 :(得分:5)

totalItems是对象,您可以通过totalItems['COUNT(*)']

访问其值

答案 1 :(得分:1)

告诉模板引擎渲染对象会将对象强制转换为字符串。这是通过查看对象以查看它是否实现toString()方法来完成的,如果没有,则会遍历对象的原型链,直到找到它为止。

在您的示例中,最接近的toString位于顶级基元Object上。此实现只输出[object Object]。关于此的最佳信息是on MDN

您可以实现自己的toString,甚至将count对象包装在具有名称和自定义toString的自定义对象中。但在你的情况下,你被赋予了一个通用对象,并且(大概)不是在更多面向对象的设计模式中抽象代码的层次。在这种情况下,使用JSON.stringify包装模板代码更容易,它会将任何对象序列化为包含JSON数据的字符串,这对开发人员来说是人类可读的:

<% JSON.stringify(totalItems, null, 2) %>

答案 2 :(得分:0)

[object Object]来自.toString()函数。示例:{ a: 1 }.toString()

您需要将其封装在JSON.stringify(...)中,例如:JSON.stringify({ a: 1 }) =&gt; { "a": 1 }

答案 3 :(得分:0)

要完整打印ObjectArray,您可以使用:

JSON.stringify(obj, null, 4);

这会将给定Object的String表示形式返回为树。

例如:

{a: 1, b: 2, c: {d: 4}}

变为:

{
    "a": 1,
    "b": 2,
    "c": {
        "d": 4
    }
}