是否有类似toString的函数用于javascript对象?

时间:2012-07-24 13:39:32

标签: javascript debugging

在使用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'}

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

7 个答案:

答案 0 :(得分:5)

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

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

所以你可以调用alert(foo);,它将显示foo的

的JSON表示

答案 1 :(得分:3)

使用

alert(JSON.stringify(temp)) ;

而不是

alert(temp) ;  

答案 2 :(得分:1)

您也可以这样做,以便提醒格式可以是您想要的

 Object.prototype.toString = function{
    var str='';
    for(a in this)
    {
      str+=a +' = '+obj[a]);
    }    
    }

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

一个解决方案是:

dump() - Javascript equivalent of PHP's print_r() function

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

参考:How Can I Beautify JSON Programmatically

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

参考:How to Print Debug Messages in the google chrome javascript console

更好的是:使用JavaScript调试器来分析对象。这通常是比简单打印或警告更好的体验。但是如果你必须在许多地方这样做,控制台日志通常会更好。

参考:How do you launch the javascript debugger in Google Chrome?

答案 5 :(得分:0)

  

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

如果您记录它,大多数好的浏览器控制台都会让您深入查看对象。例如,使用Chrome:

console.log(obj);

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

答案 6 :(得分: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;
}
相关问题