覆盖console.log以格式化数字

时间:2017-09-19 13:44:18

标签: javascript debugging console.log

我经常需要在javascript调试期间将数字记录到控制台,但我不需要所有小数位。

console.log("PI is", Math.PI); // PI is 3.141592653589793

如何覆盖console.log以始终格式化带有2位小数的数字?

注意:覆盖Number.prototype.toString()无法达到此目的。

3 个答案:

答案 0 :(得分:2)

覆盖内置的东西是一个非常糟糕的主意。可以编写自己的小函数作为快捷方式:

const log = (...args)=> console.log(...args.map(el =>
     typeof el === "number"? Number(el.toFixed(2)) : el
));

log("Math.PI is ", Math.PI);

答案 1 :(得分:1)

你可以选择console.log的猴子补丁,这通常是不可取的。

void function () {
    var log = console.log;
    console.log = function () {
        log.apply(log, Array.prototype.map.call(arguments, function (a) {
            return typeof a === 'number'
                ? +a.toFixed(2)
                : a;
            }));
        };
    }();

console.log("PI is", Math.PI);  // PI is 3.14
console.log("A third is", 1/3); // A third is 0.33

答案 2 :(得分:0)

制作一个易于输入和格式化数字的快捷方式功能:

    const dp = function() {
        let args = [];
        for (let a in arguments) args.push(typeof arguments[a] == "number"?arguments[a].toFixed(2):arguments[a])
        console.log.apply(console, args);
    }

给你:

dp(" PI是",Math.PI); // PI为3.14