繁体   English   中英

获得比“ [object Object]”更有用的值进行调试吗?

[英]Get a more useful value than “[object Object]” for debugging?

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

因此,当您调试并获得以下信息时:

[object Object]

您将获得变量名称和类型:

[foo String]

为什么这不可能呢?

JSON.stringify可能就是您想要的,尽管它不会为您提供变量的名称-如果没有第三方工具,JavaScript根本无法做到这一点。

您可以使用对象的构造函数属性来访问其constructor ,尽管不能保证,因为构造函数属性是可写的。

您可能还需要研究debugger语句。

有点古怪,但是它可以帮助您找到什么是对象源:

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有其用途。 并应按原意使用。

要直接回答有关仅翻转“全局标志”而不是更改调试方法的问题,请执行以下操作:

假设只在调试期间执行此操作,则可以临时重写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}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM