我写了一个函数来以可读的形式转储JS对象,尽管输出没有缩进,但添加它应该不太难:我从我为Lua(它复杂得多)制作的函数中制作了这个函数,该函数处理了这个缩进问题。
以下是“简单”版本:
function DumpObject(obj)
{
var od = new Object;
var result = "";
var len = 0;
for (var property in obj)
{
var value = obj[property];
if (typeof value == 'string')
value = "'" + value + "'";
else if (typeof value == 'object')
{
if (value instanceof Array)
{
value = "[ " + value + " ]";
}
else
{
var ood = DumpObject(value);
value = "{ " + ood.dump + " }";
}
}
result += "'" + property + "' : " + value + ", ";
len++;
}
od.dump = result.replace(/, $/, "");
od.len = len;
return od;
}
我会考虑改进一下。
注意1:要使用它,请执行并使用od.dump。很复杂,因为我也想要len值(项目数量)用于其他目的。使函数仅返回字符串是微不足道的。
注2:它不处理引用中的循环。od = DumpObject(something)
编辑
我做了缩进的版本。
function DumpObjectIndented(obj, indent)
{
var result = "";
if (indent == null) indent = "";
for (var property in obj)
{
var value = obj[property];
if (typeof value == 'string')
value = "'" + value + "'";
else if (typeof value == 'object')
{
if (value instanceof Array)
{
// Just let JS convert the Array to a string!
value = "[ " + value + " ]";
}
else
{
// Recursive dump
// (replace " " by "\t" or something else if you prefer)
var od = DumpObjectIndented(value, indent + " ");
// If you like { on the same line as the key
//value = "{\n" + od + "\n" + indent + "}";
// If you prefer { and } to be aligned
value = "\n" + indent + "{\n" + od + "\n" + indent + "}";
}
}
result += indent + "'" + property + "' : " + value + ",\n";
}
return result.replace(/,\n$/, "");
}
选择带有递归调用的行上的缩进,然后通过切换此行后面的注释行来大括号样式。
...我看到你鞭打了自己的版本,这很好。游客将有一个选择。