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

IT技术 javascript google-chrome console logging
2021-03-14 15:36:00

我想使用 console.log() 来记录消息,而无需在每次调用 console.log() 后追加新行。这可能吗?

6个回答

不,这不可能。如果您希望将其全部放在一行中,则必须保留一个字符串并进行连接,或者将您的输出放在其他地方(例如,另一个窗口)。

@imrankhan:这不是问题所在。与传递多个参数/使用相比,扩展运算符不会在此处添加任何新内容apply
2021-04-28 15:36:00
@deltaray readlinequestion不是console.log. 问题也与浏览器控制台有关,而不是 Node.js。
2021-05-02 15:36:00
实际上,这是可能的,但可能不是每个人都想到的用途。就我而言,我只是想打印一个问题以从命令行终端获取输入。答案见这个问题的答案:stackoverflow.com/questions/26683734/...
2021-05-14 15:36:00
@minitech 您可以使用扩展运算符在一行中打印。参见示例 jsfiddle.net/imranqau5373/7m65at9L/2
2021-05-15 15:36:00

在 NodeJS 中,您可以使用 process.stdout.write 并且可以根据需要添加 '\n'。

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

NodeJS不是Chrome。这个答案与“你能在没有换行符的情况下使用 console.log 吗?”这个问题无关.
2021-05-06 15:36:00
我来到这里寻找这个,所以添加解决方案很好。其他人也有同样的想法。
2021-05-16 15:36:00

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

这比听起来容易得多:

  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);

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

这是这里最好的答案。您甚至可以使用 max 行来初始化,以保持日志堆栈足够短,这样您就不会最终记录大量数据。
2021-05-05 15:36:00

您可以根据需要放入任意数量的东西arguments

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

您将在一行中获得所有输出,并带有内联的对象引用,然后您可以从那里下拉他们的检查员。

我认为这个答案很有用。
2021-04-24 15:36:00
这很有用。尽管它没有回答这个问题,但它确实为大多数人在发现这个问题时会寻找的东西提供了一个解决方案。
2021-05-03 15:36:00
使用多个参数会破坏 console.log 样式,因为您只能在第一个参数中设置样式。
2021-05-08 15:36:00
任何人都想在没有换行的情况下打印的原因是以下输出未知。或者想象一个使用例如点的“加载器栏”。
2021-05-12 15:36:00
这如何回答问题?
2021-05-14 15:36:00

最简洁的答案是不。

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

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

免责声明:我会将其归类为黑客。

为实际回答问题点赞!答案是不。
2021-04-25 15:36:00
非常黑客,但很聪明。如果您跟踪已记录到控制台的内容(例如通过维护某种虚拟缓冲区),您可以重建缓冲区并在每次清除时附加一个新字符串。
2021-05-02 15:36:00