使用console.log时,将数组呈现为[object object]



我在typescript中有一个对象"obj";。当我运行时:

console.log(obj);

它在终端控制台中呈现如下:

[object Object]

只有在我用JSON.stringify(obj)方法包装它之后,它才会按预期渲染对象:

[{"allowed_values":["true"],"property":"pro1","required":"true"}]

我错过了什么?为什么当我运行";console.log(("?


以下是我看到的问题的场景:

violation = {"my_properties":[{"allowed_values":[{"Ref":"The bucket's logical resource name"}],"property":"BucketPolicy.Properties.Bucket","required":"true"}],"decision":"deny","message":"Some message.","policy_id":"FT_S3_0004","resource":"MyFirstBucketB8884501","type":"AWS::S3::Bucket","controls":["NIST-800-53-SA-8(2)"]}
console.log(violation)

该输出:

{
my_properties: [
{
allowed_values: [Array],
property: 'BucketPolicy.Properties.Bucket',
required: 'true'
}
],
decision: 'deny',
message: 'Some message.',
policy_id: 'FT_S3_0004',
resource: 'MyFirstBucketB8884501',
type: 'AWS::S3::Bucket',
controls: [ 'NIST-800-53-SA-8(2)' ]
}

(请注意,它打印的是[Array],而不是数组中的实际元素(。

我想你并没有告诉我们整个故事。我可以使用很好地记录阵列对象

console.log([{"allowed_values":["true"],"property":"pro1","required":"true"}]);

然而,如果你做这样的事情,你所看到的将会发生:

console.log("obj:" + obj);

在这种情况下,会隐式调用.toString((,以便将对象附加到前面的字符串中。你可以做这个替代方案,它会起作用:

console.log("obj:", obj);

您不能将整个对象转换为字符串,而[object object]是console.log看到对象时输出的内容。只有当我们将其转换为字符串时,记录器才会延长对象的字符串表示形式。

最新更新