覆盖 console.log 以格式化数字

Override console.log to format numbers

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

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

如何覆盖 console.log 以始终将数字格式化为小数点后两位?

注意:重写 Number.prototype.toString() 不会实现此目的。

创建一个快捷键功能,便于输入和格式化数字:

    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 is", Math.PI); // 圆周率是 3.14

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

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

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

您可以为 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