javascript对象是否有类似toString的函数?
在使用javascript进行调试和开发时,我经常想提醒对象,因此我使用了以下代码:javascript对象是否有类似toString的函数?,javascript,debugging,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 shou
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'}
或者其他更好的建议,这样我就可以轻松地查找对象。javascript参考指南说有一个用于javascript对象的toString方法,请参见页面 它在mozilla开发者页面上,但我相信这应该是您所需要的。摘录在这里,” var o=新对象(); o、 toString();“使用
alert(JSON.stringify(temp)) ;
而不是
alert(temp) ;
一种解决办法是:
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
参考:
而alert()只会让你更加悲伤,开始使用控制台日志吧。它们是持久性的,允许您更一致地引用输出
参考:
更好的方法是:使用JavaScript调试器分析对象。这通常比简单地打印或提醒信息要好。但如果必须在许多位置执行此操作,控制台日志通常会更好
参考:
或者其他更好的建议,这样我可以很容易地查找对象
大多数优秀浏览器的控制台都允许您在登录对象时向下钻取该对象。例如,对于Chrome:
console.log(obj);
将树视图对象记录到控制台。警报调用toString,因此您可以出于调试目的覆盖toString:
Object.prototype.toString = function() {
return JSON.stringify(this);
};
所以你可以调用
alert(foo)代码>,它将显示foo的JSON表示形式。您也可以这样做,以便警报格式可以是您想要的格式
Object.prototype.toString = function{
var str='';
for(a in this)
{
str+=a +' = '+obj[a]);
}
}
您可以使用此功能:
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;
}
功能转储(arr,级别){
var_text=“”;
如果(!level)level=0;
var级别_=”;
对于(var j=0;j 1)
dumped_text=dumped_text.substring(0,dumped_text.length-1);
转储的_text+=“]”;
}else if(类型=='object'){
转储的\u text+=“{\n”;
用于(arr中的var项目){
var值=arr[项目];
转储文本+=级别填充+项目+“:”;
dumped_text+=转储(值,级别+1)+',\n';
}
如果(文本长度>2)
dumped_text=dumped_text.substring(0,dumped_text.length-2);
转储的\u text+=“\n”+级别\u padding.substring(0,级别\u padding.length-4)+“}”;
}else if(type=='string'){
转储_text=“”“+arr+””;
}else if(类型=='number'){
转储_text=arr+“”;
}else if(类型=='boolean'){
转储_text=arr+“”;
}
返回文本;
}
alert(JSON.stringify(temp))怎么样代码>?@jamesalardice是的,这是一个很好的方法,但我想扩展对象定义。在使用数组时,它们会像字符串一样发出警报,这是如何做到的?@RupeshPatel-使用数组的方式是该语言的一个内部部分。ECMAScript规范中详细记录了它。对象的情况并非如此。您可以覆盖Object.prototype.toString
方法,也可以调用其他函数,如各种答案中所示。问题是关于对象,而不是数组。对不起,我现在明白您的意思了,“我想知道是否有类似于数组的东西”这句话让我困惑。对不起,我发现了什么。还有一些其他的方法可以使用,“这个页面有它们是的,这是一个很好的方法,但是我可以做一些类似数组的东西,这样警报(temp)就可以工作了。”。因此,所有对象在收到警报时都可以共享该方法。哦,天哪,我怎么会忽略这件事。无论如何,谢谢:)希望在您的代码库中,有人没有做不好的对象检测,而您破坏了它,并将其覆盖到全局字符串中。@epascarello对我来说,这只是为了调试目的,完成后评论两行不会有任何关系。谢谢你的评论。这也是一个很好的建议。我想我应该走这条路。谢谢:)