我想使用 console.log() 来记录消息,而无需在每次调用 console.log() 后追加新行。这可能吗?
Chrome JavaScript 开发者控制台:是否可以在没有换行符的情况下调用 console.log()?
IT技术
javascript
google-chrome
console
logging
2021-03-14 15:36:00
6个回答
不,这不可能。如果您希望将其全部放在一行中,则必须保留一个字符串并进行连接,或者将您的输出放在其他地方(例如,另一个窗口)。
在 NodeJS 中,您可以使用 process.stdout.write 并且可以根据需要添加 '\n'。
console.log(msg)
相当于process.stdout.write(msg + '\n')
。
是的,这是可能的(查看下面的演示)——通过在本机浏览器控制台之上实现您自己的虚拟控制台,然后将其同步到真实控制台。
这比听起来容易得多:
- 维护一个显示缓冲区(例如一个字符串数组,每个字符串代表一行)
console.clear()
在写入之前调用以删除任何以前的内容- 调用
console.log()
(或警告、错误等)用显示缓冲区中的内容填充控制台
实际上,我已经这样做了一段时间了。这个想法的一个简短的基本实现将是以下几行,但仍然能够动画控制台内容:
// =================================================
// Rudimentary implementation of a virtual console.
// =================================================
var virtualConsole = {
lines: [],
currentLine: 0,
log: function (msg, appendToCurrentLine) {
if (!appendToCurrentLine) virtualConsole.currentLine++;
if (appendToCurrentLine && virtualConsole.lines[virtualConsole.currentLine]) {
virtualConsole.lines[virtualConsole.currentLine] += msg;
} else {
virtualConsole.lines[virtualConsole.currentLine] = msg;
}
console.clear();
virtualConsole.lines.forEach(function (line) {
console.log(line);
});
},
clear: function () {
console.clear();
virtualConsole.currentLine = 0;
}
}
// =================================================
// Little demo to demonstrate how it looks.
// =================================================
// Write an initial console entry.
virtualConsole.log("Loading");
// Append to last line a few times.
var loadIndicatorInterval = setInterval(function () {
virtualConsole.log(".", true); // <- Append.
}, 500);
// Write a new line.
setTimeout(function () {
clearInterval(loadIndicatorInterval);
virtualConsole.log("Finished."); // <- New line.
}, 8000);
当与直接的控制台交互混合时,它肯定有其缺点,并且肯定看起来很丑 - 但它肯定有其有效用途,没有它你就无法实现。
您可以根据需要放入任意数量的东西arguments
:
console.log('hi','these','words','will','be','separated','by','spaces',window,document)
您将在一行中获得所有输出,并带有内联的对象引用,然后您可以从那里下拉他们的检查员。
最简洁的答案是不。
但
如果您的用例涉及尝试记录永久更改的数据同时避免控制台膨胀,那么实现此目的的一种方法(在某些浏览器中)是console.clear()
在每次输出之前使用。
function writeSingleLine (msg) {
console.clear();
console.log(msg);
}
writeSingleLine('this');
setTimeout( function () { writeSingleLine('is'); }, 1000);
setTimeout( function () { writeSingleLine('a'); }, 2000);
setTimeout( function () { writeSingleLine('hack'); }, 3000);
请注意,这可能会破坏应用程序中发生的任何其他日志记录功能。
免责声明:我会将其归类为黑客。
其它你可能感兴趣的问题