3

在使用 javascript 进行调试和开发时,我经常想提醒对象,所以我使用了以下代码:

for(a in obj)
{
  alert(a +' = '+obj[a])
}    

它服务很好,但它太烦人了。我想知道数组是否有这样的东西:

var temp = ['a','b','c'];
alert(temp); // it will alert a,b,c 

所以我想做的是:

var temp = {a:'a',b:'b',c:'c'};
alert(temp) ; // It should alert json {a:'a',b:'b',c:'c'}

或任何其他更好的建议,以便我可以轻松查找对象。

4

7 回答 7

4

警报调用 toString,因此您可以覆盖 toString 以进行调试:

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

所以你可以打电话alert(foo);,它会显示 foo 的 JSON 表示

于 2012-07-24T13:49:18.833 回答
3

采用

alert(JSON.stringify(temp)) ;

代替

alert(temp) ;  
于 2012-07-24T13:42:12.067 回答
1

您也可以这样做,以便警报格式可以是您想要的

 Object.prototype.toString = function{
    var str='';
    for(a in this)
    {
      str+=a +' = '+obj[a]);
    }    
    }
于 2012-07-26T17:08:48.833 回答
0

javascript参考指南说javascript对象有一个toString方法,请参阅页面https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/toString

它在 mozilla 开发者页面上,但我相信这应该是您所需要的。摘录在这里,“ var o = new Object(); o.toString(); ”

于 2012-07-24T13:41:56.717 回答
0

一种解决方案是:

dump() - 相当于 PHP 的 print_r() 函数的 Javascript

Perl 为这样的工作提供了 Data::Dumper。非常适合这种情况。非常适合调试。

更好的方法是使用 JSON.stringify:

JSON.stringify({a:1,b:2,c:{d:1,e:[1,2]}}, null, 4); // Indented 4 spaces
JSON.stringify({a:1,b:2,c:{d:1,e:[1,2]}}, null, "\t"); // Indented with tab

参考:如何以编程方式美化 JSON

而 alert() 只会让你更伤心,开始使用控制台日志吧。它们是持久的,允许您更一致地引用输出。

参考:如何在 google chrome javascript 控制台中打印调试消息

更好的是:使用 JavaScript 调试器来分析您的对象。这通常比简单地打印或警告信息更好。但是,如果您必须在许多位置执行此操作,控制台日志通常会更好。

参考:如何在 Google Chrome 中启动 javascript 调试器?

于 2012-07-24T13:43:09.620 回答
0

或任何其他更好的建议,以便我可以轻松查找对象。

如果您记录一个对象,大多数优秀浏览器的控制台都可以让您深入了解它。例如,使用 Chrome:

console.log(obj);

将树视图对象记录到控制台。

于 2012-07-24T13:44:27.607 回答
0

你可以使用这个功能:

function dump(arr,level) {
    var dumped_text = "";

    if(!level) level = 0;
    var level_padding = "";

    for(var j=0;j<level+1;j++)
        level_padding += "    ";

    var type = typeof(arr);

    if (arr === null){
        dumped_text = "null";
    } else if (arr instanceof Array) {
        dumped_text += "[";

        for(var item in arr) {
            var value = arr[item];
            dumped_text += dump (value, level+1) + ',';
        }

        if(dumped_text.length > 1)
            dumped_text = dumped_text.substring (0, dumped_text.length-1);
        dumped_text += "]";
    } else if(type == 'object') {
        dumped_text += "{\n";

        for(var item in arr) {
            var value = arr[item];
            dumped_text += level_padding + item + " : ";
            dumped_text += dump(value,level+1) + ',\n';
        }

        if(dumped_text.length > 2)
            dumped_text = dumped_text.substring (0, dumped_text.length-2);

        dumped_text += "\n" + level_padding.substring (0, level_padding.length-4) + "}";
    } else if (type == 'string'){
        dumped_text = "'" + arr + "'";
    } else if (type == 'number'){
        dumped_text = arr + "";
    } else if (type == 'boolean'){
        dumped_text = arr + "";
    }
 return dumped_text;
}
于 2012-08-21T16:24:33.213 回答