获得比" [object Object]"更有用的价值。用于调试?

时间:2015-01-18 07:50:33

标签: javascript debugging object-to-string

JavaScript中没有环境标志,因此您可以为对象打开一些元数据。

所以当你调试并得到:

[object Object]

您将获得变量名称并输入:

[foo String]

为什么这不可能?

3 个答案:

答案 0 :(得分:0)

JSON.stringify可能正是您所寻找的,但它不会为您提供变量的名称 - 如果没有第三方工具,JavaScript就无法做到这一点。

可以使用其constructor属性来访问对象的构造函数,但由于构造函数属性是可写的,因此无法保证。

您可能还想查看debugger声明。

答案 1 :(得分:0)

有点hacky,但它可以帮助你找到你的对象来源:

function Foo()
{}

var toClass = function(a)
{
    var _name = a.constructor.toString().match(/^function (\w+)/i); //\w probably should be enhanced
    console.log(_name[1])
}

toClass( new Foo()) //Foo
toClass( [1, 2]) //Array
toClass( new Date()) //Date
toClass( {"a":2}) //Object

除了注意:不要覆盖toString仅用于调试。 toString有其目的。应该按原样使用。

答案 2 :(得分:0)

直接回答关于只是翻转“全局标志”而不是更改调试方法的问题:

假设您只在调试期间执行此操作,您可以暂时覆盖Object.prototype.toString以返回对象的JSON表示:

Object.prototype.toString = function () { return JSON.stringify(this); };

然后在浏览器控制台中:

var obj = { a: 42 };
console.log('My object: ' + obj);

会给你:

My object: {"a":42}

即使这回答了您的问题,我也不建议全局覆盖基本方法,因为它有可能导致灾难性问题。尝试依赖于其他人在评论中建议的单元测试和断点+调试。