簡體   English   中英

將多個參數傳遞給console.log

[英]Passing multiple arguments to console.log

我有一個實用程序函數,它用一個條件包裝console.log,所以如果我們在dev環境中並且console.log存在,我們只調用console.log:

/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
    return function (message) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(message);
        }
    };
}());

這對於普通的控制台日志非常有效。 但是我最近發現了向console.log傳遞多個參數的樂趣:它允許你在控制台日志前面添加一個字符串,所以console.log('DEBUG', object)輸出字符串加上一個可擴展的對象,您可以檢查的屬性。 如何更改我的conlog功能來執行此操作? 我已經嘗試注銷這樣的所有參數:

metro.conlog = (function () {
    return function (message) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(arguments);
        }
    };
}());

但是這會將參數作為數組輸出,而不是使用console.log獲得的整齊線。 您可以在此屏幕截圖中看到差異:

在此輸入圖像描述

誰能告訴我如何重現原始日志輸出?

當然你可以做到這一點, 是一個如何做到你需要的演示,並添加了額外的選項。

代碼如下:

var mylog = (function () {
    return {
        log: function() {
            var args = Array.prototype.slice.call(arguments);
            console.log.apply(console, args);
        },
        warn: function() {
            var args = Array.prototype.slice.call(arguments);
            console.warn.apply(console, args);
        },
        error: function() {
            var args = Array.prototype.slice.call(arguments);
            console.error.apply(console, args);
        }
    }
}());

var name = "Alex";
var arr = [1, 2, 3];
var obj = { a:1, b:2, c:3 };
var hello = function(msg){alert(msg);};
mylog.log("Name: ", name);
mylog.log("Window Debug: ", window);
mylog.error("Some error happened");
mylog.warn("Ahh... Warning", arr, obj);
mylog.log("more parameters: ", arr, obj, hello);

嘗試這樣的事情

/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
    return function (message, object) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(message, object);
        }
    };
}());

message類似於“DEBUG”, object是您要檢查的任何對象。

如果你想能夠將任意數量的參數傳遞給console.log ,我建議使用arguments變量。

/* Console log if environment has debug true or #debug initially passed in URL */
    metro.conlog = (function () {
        return function (message, object) {
            if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
                console.log(arguments);
            }
        };
    }());

正如我在評論中提到的,我不確定哪些瀏覽器完全支持這一點(我正在看你的IE)。

我已經測試並確認它適用於當前的Chrome,FireFox和Safari。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM