javascript 对象是不是有类似 toString 的函数?
Posted
技术标签:
【中文标题】javascript 对象是不是有类似 toString 的函数?【英文标题】:Is there a toString-like function for javascript objects?javascript 对象是否有类似 toString 的函数? 【发布时间】:2012-07-22 20:16:24 【问题描述】:在使用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'
或任何其他更好的建议,以便我可以轻松查找对象。
【问题讨论】:
alert(JSON.stringify(temp));
怎么样?
@JamesAllardice 是的,它很好,但我想扩展对象定义。如果数组像字符串一样被警告,它是如何完成的?
@RupeshPatel - 使用数组的方式是语言的内部部分。它在 ECMAScript 规范中有详细记录。对象也不一样。您可以覆盖Object.prototype.toString
方法,也可以调用另一个函数,如各种答案所示。
【参考方案1】:
你可以使用这个功能:
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;
【讨论】:
【参考方案2】:您也可以这样做,这样警报格式可以是您想要的格式
Object.prototype.toString = function
var str='';
for(a in this)
str+=a +' = '+obj[a]);
【讨论】:
这也是一个很好的建议,我想我应该走这条路谢谢:)【参考方案3】:javascript参考指南说javascript对象有一个toString方法,见页面https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/toString
它在 mozilla 开发者页面上,但我相信这应该是您需要的。摘录在这里,“ var o = 新对象(); o.toString(); "
【讨论】:
问题是询问对象,而不是数组。 对不起,我明白你现在的意思,“我想知道是否有类似数组的东西”让我感到困惑。对不起 针对我发现的内容进行了编辑。还有一些其他方法可以配合这些方法,“developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…”这个页面有它们【参考方案4】:一种解决方案是:
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】:警报调用 toString,因此您可以覆盖 toString 以进行调试:
Object.prototype.toString = function()
return JSON.stringify(this);
;
所以你可以直接调用alert(foo);
,它会显示 foo 的 JSON 表示
【讨论】:
天哪,我怎么忽略了这件事。感谢任何方式:) 希望在您的代码库中,有人没有进行不良对象检测,而您将其破坏为全局覆盖 toString。 @epascarello 对我来说只是为了调试目的,在完成后评论两行不会有任何问题。感谢您的评论。【参考方案6】:或任何其他更好的建议,以便我可以轻松查找对象。
如果您记录一个对象,大多数优秀浏览器的控制台都可以让您深入了解它。例如,使用 Chrome:
console.log(obj);
会将树视图对象记录到控制台。
【讨论】:
【参考方案7】:使用
alert(JSON.stringify(temp)) ;
而不是
alert(temp) ;
【讨论】:
是的,它很好,但我可以做一些像数组这样的东西,所以 alert(temp) 可以工作。因此所有对象都可以在收到警报时共享该方法。以上是关于javascript 对象是不是有类似 toString 的函数?的主要内容,如果未能解决你的问题,请参考以下文章
子类化 Javascript 数组。 TypeError:Array.prototype.toString 不是通用的