如何将JavaScript对象隐式记录为字符串?

时间:2013-08-21 22:24:25

标签: javascript debugging google-chrome-devtools

考虑:

var o = { a: 1, b: 2, toString: function() { return "foo"; } };

在Chrome开发工具中:

Debug Screenshot

我可以对对象做些什么,以便o在调试控制台中显示为"foo"而不是完整对象?

1 个答案:

答案 0 :(得分:2)

这是我的尝试:

(function() {
    var cl = console.log;
    console.log = function() {
        cl.apply(console, [].slice.call(arguments).map(function(el) {
            return {}.toString.call(el) === '[object Object]' && typeof el.toString === 'function' && el.toString !== Object.prototype.toString ? el.toString() : el;
        }));
    };
}());

^只需在任何console.log电话前抛出此脚本。


Test case:

console.log('str', 42, /rege?x/, { a: 1 }, [1, 2], {
        toString: function() { return "foo"; }
    }, new function() {
        this.toString = function() {
            return 'bar';
        };
    }
);

console.log output


这只是将toString方法与Object.prototype.toString不同的普通/构造对象映射到其.toString()值。我在hasOwnProperty上选择了这种方式,因为构造函数在其原型中也可能有toString方法。

如您所见,所有对象甚至基元都从本机构造函数继承toString方法,因此您可能需要针对特定​​用例进行调整。例如,上面的代码段不会使用自定义toString属性对函数对象进行字符串化。