簡體   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