【问题标题】:Put a value in webkit console from console.log into a variable将来自 console.log 的 webkit 控制台中的值放入变量中
【发布时间】:2013-03-17 18:48:57
【问题描述】:

如果 chrome/safari webkit 检查器中的输出包含打印出的对象,例如:

只有大量嵌套对象会更复杂(这就是复制/粘贴无法做到的原因)

有没有办法将它放在一个变量中以进一步检查并在它被打印到控制台(它通过console.log打印)之后处理它,只是在它已经在控制台中之后?

【问题讨论】:

    标签: javascript google-chrome webkit web-inspector


    【解决方案1】:

    $_ 将为您提供控制台的最后输出。所以在控制台中你可以分配给一个变量。

    请注意,您只能在控制台中执行此操作,而不能从您自己的代码中执行此操作。

    【讨论】:

    • 我什至不知道!这是一个非常棒的提示!
    • 从来不知道这是可能的。我想知道您是否也可以收听控制台事件?
    【解决方案2】:

    这是一种在自定义日志函数中包装console.log的方法:

    var justLogged;
    var oldLog = console.log;
    
    console.log = function () {
        oldLog.apply(console, arguments);
        justLogged = arguments;
    };
    
    console.log('test');
    
    // if necessary, restore console.log to its original behavior when you're finished with it
    console.log = oldLog;
    

    justLogged 的值将是 ['test'],因为您刚刚记录了它。

    【讨论】:

    • 最好使用oldLog.apply(this, arguments) 传递所有参数而不是只传递第一个参数。
    • @Mohsen 好点,我更新了代码以使用apply 而不是call
    【解决方案3】:

    如果您希望获得最后一个输出do as Mohsen suggests

    如果你想得到console.log 的最后一个输出,你最好的选择是一个包装函数。这可以 (1) 做您想做的事 (2) 在生产中轻松禁用,这对旧 IE 很有帮助并隐藏调试消息。

    var log = (function() {
        var lastOutput;
        var fn = function() {
            lastOutput = arguments[0];              // save the last argument
            console.log.apply(console, arguments);  // defer to console.log
        };
        fn.last = function() {
            return lastOutput;
        };
        return fn;
    })();
    
    log("abc123");
    log.last();     // => "abc123"
    

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 2018-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多