有没有办法使用字符串插值方法打印对象?
const star = {
id: 1,
name: 'Arcturus',
visualMag: -0.05,
};
这个方法不行
console.log(`${star}`); // [object Object]
这有效
console.log(`${star.name}`); // 'Arcturus'
并且只需使用 console.log(star) 就可以了
当您在模板文字中使用对象时,它会将对象强制转换为字符串。它在对象上查找
toString
方法。如果没有找到,它将使用 Object.prototype.toString
方法返回 "[object Object]"
。
因此,向对象添加一个
toString
属性。
const star = {
id: 1,
name: 'Arcturus',
visualMag: -0.05,
};
Object.defineProperty(star, "toString", {
value: function() {
return JSON.stringify(this)
}
})
console.log(`${star}`);
注:您可以直接添加
star.toString = function() { ... }
。但是,这将为对象添加一个可枚举属性,并将在您直接记录对象时显示。
您可以使用 JSON.stringify
console.log(`${JSON.stringify(test)}`)
我只是在寻找同样的东西并找到了node:util:
示例:
import util from 'node:util'; // or: const util = require('node:util');
const star = {
id: 1,
name: 'Arcturus',
visualMag: -0.05,
};
console.log(`${star}`);
// output -> [object Object]
console.log(`${util.inspect(star)}`);
// output -> { id: 1, name: 'Arcturus', visualMag: -0.05 }
// Or also using the previously mentioned JSON.stringify:
console.log(`${JSON.stringify(star)}`);
// output -> {"id":1,"name":"Arcturus","visualMag":-0.05}
我注意到的差异在于某些类型,例如错误。我有一个这样的功能:
log(debug_str = 'Trace log working', print = true) {
...
if (print)
console.log(curr_date + ': ' + debug_str);
else
return curr_data + ': ' + debug_str;
}
当我使用类似的东西时:
try {
...
} catch (err) {
log(err);
}
使用
JSON.stringify
:
log(JSON.stringify(err));
// output -> Date: Error: Code message
使用
util.inspect
:
log(util.inspect(err))
// output -> Date: Error: Code message
// trace error
// {
// body_error
// }
嘿,做这个简单的技巧:
console.log({star});
输出:
[Log] {star: {id: 1, name: "Arcturus", visualMag: -0.05}}