console.log 如何处理打印字符串和对象?

How does console.log handle printing strings and objects?

我正在尝试实现我自己的 console.log-like 东西,并且能够做类似的事情非常方便:console.log('something',obj) 并让它打印两者。

我想重新创建此功能,但首先我必须了解它。

那么 console.log 是怎么做到的呢?

我有这样的东西:

save : function(level, userId, message){

        //handles objects
        for(var i=2;i<arguments.length;i++){
            switch(typeof arguments[i]){
                case 'object':
                    message += ' ' + JSON.stringify(arguments[i]);
                break;
                case 'string':
                    message += arguments[i];
                break;
                case 'number':
                    message += arguments[i].toString();
                break;
            }
        }

我正在寻找 message 之后的所有其他参数,然后评估它们正在转换的内容,然后将它们附加到 message

目标是能够做到
logger.save('info', ,'Started app',config.env, config.port, config.etc)
并让它智能地处理所有这些对象。

我不确定 console.log 的实现,但您想查看参数对象:

function myConsoleLog() {
    for (var arg in arguments) {
        console.log(arguments[arg]);
    }
}

myConsoleLog(1, 2, 3);
myConsoleLog({}, "hello");
// etc.

您正在寻找 arguments(这类似于数组)。

function test () {
    var log = '';
    for (var i = 0; i < arguments.length; i++) {
        log += arguments[i] + ',';
    }
    console.log(log.substring(0, log.length - 1));
}

test(1); // 1
test(1,2,3,4) //1,2,3,4