[英]Can someone give a more real-world example where the setState(updaterFunc) function is more useful than the setState(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.