Chrome浏览器JavaScript开发者控制台:是否可以在不使用换行符的情况下调用console.log()?

我想在每次调用console.log()之后使用console.log()来logging消息而不添加新行。 这可能吗?

不,这是不可能的。 如果你想把它全部放在一行中,或者把你的输出放在其他地方(比如说另一个窗口),你必须保留一个string并连接起来。

在NodeJS中,你可以使用process.stdout.write,你可以添加'\ n'。

console.log(msg)等同于process.stdout.write(msg + '\n')

你可以根据自己的意愿放置尽可能多的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); 

是的,这是可能的 (查看下面的演示) – 通过在本地浏览器控制台之上实现您自己的虚拟控制台,然后将其同步到真实的控制台。

这比听起来容易得多:

  1. 维护一个显示缓冲区(例如,一个string数组代表每一行)
  2. 在写之前调用console.clear()来擦除以前的内容
  3. 调用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); 

关于@shennan的一些想法:

 function init(poolSize) { var pool = []; console._log = console.log; console.log = function log() { pool.push(arguments); while (pool.length > poolSize) pool.shift(); draw(); } console.toLast = function toLast() { while (pool.length > poolSize) pool.shift(); var last = pool.pop() || []; for (var a = 0; a < arguments.length; a++) { last[last.length++] = arguments[a]; } pool.push(last); draw(); } function draw() { console.clear(); for(var i = 0; i < pool.length; i++) console._log.apply(console, pool[i]); } } function restore() { console.log = console._log; delete console._log; delete console.toLast; } init(3); console.log(1); console.log(2); console.log(3); console.log(4); // 1 will disappeared here console.toLast(5); // 5 will go to row with 4 restore(); 
 // Source code for printing 2d array window.onload = function () { var A = [[1, 2], [3, 4]]; Print(A); } function Print(A) { var rows = A.length; var cols = A[0].length; var line = ""; for (var r = 0; r < rows; r++) { line = ""; for (var c = 0; c < cols; c++) { line += A[r][c] + " "; } console.log(line); } }