Javascript 如何使用字符串插值打印对象

问题描述 投票:0回答:4

有没有办法使用字符串插值方法打印对象?

const star = {
    id: 1,
    name: 'Arcturus',
    visualMag: -0.05,
};

这个方法不行

console.log(`${star}`); // [object Object]

这有效

console.log(`${star.name}`); // 'Arcturus'

并且只需使用 console.log(star) 就可以了

javascript object javascript-objects string-interpolation
4个回答
1
投票

当您在模板文字中使用对象时,它会将对象强制转换为字符串。它在对象上查找

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() { ... }
。但是,这将为对象添加一个可枚举属性,并将在您直接记录对象时显示。


0
投票

您可以使用 JSON.stringify

console.log(`${JSON.stringify(test)}`)

0
投票

我只是在寻找同样的东西并找到了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
// }

-1
投票

嘿,做这个简单的技巧:

console.log({star});

输出:

[Log] {star: {id: 1, name: "Arcturus", visualMag: -0.05}}
© www.soinside.com 2019 - 2024. All rights reserved.