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

Mit*_*lad 82 javascript console logging google-chrome

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

Ry-*_*Ry- 41

不,这是不可能的.你必须保留一个字符串并连接,如果你想要一行,或将你的输出放在别处(比如,另一个窗口).

  • @deltaray readline 的 `question` 不是 `console.log`。问题也与浏览器控制台有关,而不是 Node.js。 (5认同)
  • 实际上,这是可能的,但可能并非每个人都想使用。就我而言,我只是试图打印问题以从命令行终端获取输入。请参阅此问题的答案以获取答案:http://stackoverflow.com/questions/26683734/how-can-i-take-console-input-from-a-user-in-node-js (2认同)

Pab*_*abo 32

在NodeJS中,您可以使用process.stdout.write,如果需要,可以添加'\n'.

console.log(msg)相当于process.stdout.write(msg + '\n').

  • NodeJS不是**Chrome.这个答案与*'你能没有换行的console.log吗?'这个问题无关. (11认同)

tko*_*one 17

您可以根据需要添加任意数量的内容arguments:

console.log('hi','these','words','will','be','separated','by','spaces',window,document)

您将在一行中获得所有输出,并且对象引用为内联,然后您可以从那里下载检查器.

  • 这是如何回答这个问题的? (58认同)
  • 我认为这个答案很有用. (16认同)
  • 这很有用.尽管它没有回答这个问题,但它确实为大多数人在找到这个问题时所寻求的内容提供了解决方案. (12认同)
  • 任何人想要打印而不换行的原因是以下输出未知。或者想象一下使用点等的“加载栏”。 (2认同)

Joh*_*isz 13

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

这比听起来容易得多:

  1. 维护显示缓冲区(例如,每个代表一行的字符串数组)
  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);
Run Code Online (Sandbox Code Playgroud)

与直接控制台交互混合使用时,它肯定有其缺点,并且看起来确实很丑陋-但它确实具有其有效的用途,没有它,您将无法实现。

  • 这是这里最好的答案。您甚至可以使用 max 行来初始化,以保持日志堆栈足够短,这样您就不会最终记录大量数据。 (3认同)

she*_*nan 11

最简洁的答案是不.

如果您的用例涉及尝试记录永久更改数据同时避免控制台膨胀,那么实现此目的的一种方法(在某些浏览器中)将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);
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会破坏应用程序中发生的任何其他日志记录功能.

免责声明:我认为这是一个黑客.

  • 非常hack,但是很聪明。如果您跟踪已记录到控制台的内容(例如,通过维护某种虚拟缓冲区),则可以重建缓冲区并在每次清除时添加新的字符串。 (3认同)