Javascript 如何获取console.log所示的变量的字符串表示形式
当变量通过Javascript 如何获取console.log所示的变量的字符串表示形式,javascript,node.js,string,Javascript,Node.js,String,当变量通过console.log()输出时,如何获取该变量的字符串表示形式 e、 g 我主要感兴趣的是在Node.js中运行它(但也很好奇在浏览器中运行时是否可能)。Node.js控制台实现使用util.inspect将对象输出字符串化: console.assert(util.inspect(ret) === "Promise { 'my string' }"); 将承诺断言为promise{'mystring'}是不安全的,因为这样表示承诺是不必要的。在REPL中,它将是: Promise
console.log()
输出时,如何获取该变量的字符串表示形式
e、 g
我主要感兴趣的是在Node.js中运行它(但也很好奇在浏览器中运行时是否可能)。Node.js控制台实现使用
util.inspect
将对象输出字符串化:
console.assert(util.inspect(ret) === "Promise { 'my string' }");
将承诺断言为promise{'mystring'}
是不安全的,因为这样表示承诺是不必要的。在REPL中,它将是:
Promise {
'my string',
domain:
Domain {
domain: null,
_events: { error: [Function: debugDomainError] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
即使浏览器中存在
util
polyfill,它也不能用于同步串接承诺,因为无法检查本机承诺,只能与then
或catch
链接。Node.js检查ES6承诺。这是一种针对您的问题的黑客攻击,它将适用于浏览器和节点
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
严格来说,控制台不输出字符串表示。对于许多对象,它输出交互式对象检查器
Promise{'mystring'}
很可能是这些特别检查员之一。因此,您的问题的答案主要是no.ret=myFunc()。然后(val=>console.log(val))谢谢@deceze。我最感兴趣的是在Node.js中运行它——这是否使获得字符串表示变得更可能?赞成者指出承诺不支持同步内省
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