如何获取变量的字符串表示形式,如console.log所示

时间:2018-11-02 05:04:06

标签: javascript node.js string

如何获取console.log()输出的变量的字符串表示形式?

例如

const myFunc = async () => 'my string';
ret = myFunc();
console.log(ret);  // Promise { 'my string' }
stringRepresentation = ret.someMethod(); // is there a method or some other way?
console.assert(stringRepresentation === "Promise { 'my string' }");

我主要是想在Node.js中运行它(但也好奇在浏览器中运行时是否有可能)。

2 个答案:

答案 0 :(得分:3)

Node.js控制台实现使用util.inspect来字符串化对象输出:

console.assert(util.inspect(ret) === "Promise { 'my string' }");

断言诺言Promise { 'my string' }是不安全的,因为这样不必要地表示了诺言。在REPL中,它将是:

Promise {
  'my string',
  domain:
   Domain {
     domain: null,
     _events: { error: [Function: debugDomainError] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }

即使浏览器存在util polyfill,它也不能用于同步化承诺,因为无法检查本机承诺,只能与thencatch链接。 Node.js uses native bindings检查ES6承诺。

答案 1 :(得分:0)

这是针对您的问题的一种破解方法,将适用于浏览器和Node,

function assertPromise(promiseVal, stringVal) {
                promiseVal()
                        .then(str => {
                                let stringRepresentation = `Promise { '${str}' }`;
                                console.assert(stringRepresentation === stringVal);

                        });
}

const myFunc = async () => 'my string';

ret = myFunc();
console.log(ret);  // Promise { 'my string' }

assertPromise(myFunc, "Promise { 'my string' }");       // Assert to TRUE