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

时间:2012-03-09 01:18:23

标签: javascript google-chrome console logging

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

12 个答案:

答案 0 :(得分:40)

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

答案 1 :(得分:29)

In NodeJS you can use process.stdout.write and you can add '\n' if you want.

console.log(msg) is equivalent to process.stdout.write(msg + '\n').

答案 2 :(得分:13)

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

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

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

答案 3 :(得分:11)

简短的回答是否定的。

<强> 但是

如果您的用例涉及尝试记录永久更改数据,同时避免控制台膨胀,那么实现此目的的一种方法(在某些浏览器中)将是在每次输出之前使用console.clear()

&#13;
&#13;
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);
&#13;
&#13;
&#13;

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

免责声明:我认为这是一个黑客攻击。

答案 4 :(得分:8)

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

这比听起来容易得多:

  1. 维护显示缓冲区(例如,每个代表一行的字符串数组)
  2. 在写入之前调用console.clear()以删除任何以前的内容
  3. 调用console.log()(或警告,错误等)以使用显示缓冲区中的内容填充控制台
  4. 实际上,我已经做了一段时间了。这个想法的一个简短的基本实现将是以下几点,但仍然能够动画控制台内容:

    &#13;
    &#13;
    // =================================================
    // 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);
    &#13;
    &#13;
    &#13;

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

答案 5 :(得分:1)

将输出收集到数组中,然后将join函数与首选分隔符一起使用

function echo(name, num){
    var ar= [];
    for(var i =0;i<num;i++){
        ar.push(name);
    }
    console.log(ar.join(', '));
}

echo("apple",3)

也请Array.prototype.join()查看模式详细信息

var elements = ['Fire', 'Wind', 'Rain'];

console.log(elements.join());
// expected output: Fire,Wind,Rain

console.log(elements.join(''));
// expected output: FireWindRain

console.log(elements.join('-'));
// expected output: Fire-Wind-Rain

答案 6 :(得分:0)

关于@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();

答案 7 :(得分:0)

您可以使用扩展运算符在单行中显示输出。 javascript ES6的新功能。参见下面的示例

   for(let i = 1; i<=10; i++){
        let arrData = [];
        for(let j = 1; j<= 10; j++){
            arrData.push(j+"X"+i+"="+(j*i));
        }
        console.log(...arrData);
    }

这将在一行中打印1到10张表。

答案 8 :(得分:0)

如果您唯一的目的是停止在多行上打印,则一种方法是将值分组(如果您不希望它们填满整个控制台)

P.S。:-:请参见浏览器控制台以获取输出

let arr = new Array(10).fill(0)


console.groupCollapsed('index')

arr.forEach((val,index) => {
  console.log(index)
})

console.groupEnd()

console.group

console.groupCollapsed

答案 9 :(得分:0)

例如,如果您希望控制台日志数组元素没有换行符,您可以这样做

const arr = [1,2,3,4,5];

Array.prototype.log = (sep='') => {
    let res = '';
    for(let j=0; j<this.lengthl j++){
        res += this[j];
        res += sep;
    }
    console.log(res);
}

// console loging

arr.log(sep=' '); // result is: 1 2 3 4 5 

答案 10 :(得分:0)

可用于调试或了解长链地图的实际功能。

let myConsole = (function(){
    let the_log_buffer=[[]], the_count=0, the_single_line=false;
    const THE_CONSOLE=console, LINE_DIVIDER='  ~  ', ONE_LINE='ONE_LINE',     
          PARAMETER_SEPARATOR= ', ', NEW_LINE = Symbol();
          
    const start = (line_type='NOT_ONE_LINE') => {
        the_log_buffer=[[]];
        the_count=0;
        the_single_line = line_type == ONE_LINE;   
        console = myConsole;  
    }
    const stop = () =>  {
        isNewline();
        console = THE_CONSOLE; 
    };                          
    const isNewline = a_param => {
        if (the_single_line && a_param==NEW_LINE) return;
        const buffer_parts = the_log_buffer.map(one_set=> one_set.join(PARAMETER_SEPARATOR))
        const buffer_line = buffer_parts.join(LINE_DIVIDER);    
        if (the_single_line) {                           
          THE_CONSOLE.clear();
        }
        THE_CONSOLE.log( buffer_line ); 
        the_log_buffer = [[]];
        the_count=0;
    }
    const anObject = an_object => {            
        if (an_object instanceof Error){
            const error_props = [...Object.getOwnPropertyNames(an_object)];
            error_props.map( error_key => an_object['_' + error_key] = an_object[error_key] );
        }
        the_log_buffer[the_count].push(JSON.stringify(an_object));
    }
    const aScalar = a_scalar => {
        if (typeof a_scalar === 'string' && !isNaN(a_scalar)) {
            the_log_buffer[the_count].push("'" + a_scalar + "'");
        } else {
            the_log_buffer[the_count].push(a_scalar);
        }
    }
    const notNewline = a_param => typeof a_param === 'object' ? anObject(a_param):aScalar(a_param);
    const checkNewline = a_param => a_param == NEW_LINE ? isNewline(a_param) : notNewline(a_param);
    const log = (...parameters_list) => {   
        the_log_buffer[the_count]=[];
        parameters_list.map( checkNewline );
        if (the_single_line){
            isNewline(undefined);
        }else{
            const last_log = parameters_list.pop();
            if (last_log !== NEW_LINE){
                the_count++;
            }
        }
    }
    return Object.assign({}, console, {start, stop, log, ONE_LINE, NEW_LINE});
})();

function showConcatLog(){
    myConsole.stop();
    myConsole.start();
    console.log('a');
    console.log('bb');  
    console.dir({i:'not', j:'affected', k:'but not in step'})
    console.log('ccc');
    console.log([1,2,3,4,5,'6'], {x:8, y:'9'});
    console.log("dddd", 1, '2', 3, myConsole.NEW_LINE);
    console.log("z", myConsole.NEW_LINE, 8, '7');
    console.log(new Error("error test"));
    myConsole.stop();
}

myConsole.start(myConsole.ONE_LINE);
var stop_callback = 5;
function myCallback(){
    console.log(stop_callback, 'Date.now()', myConsole.NEW_LINE, Date.now());
    stop_callback--;
    if (stop_callback>0){
        window.setTimeout(myCallback, 1000);
    }else{
        showConcatLog();
    }
}       
window.setTimeout(myCallback, 1000);

答案 11 :(得分:-3)

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