你可以寫這個功能,任何對象轉換爲string
。
看JSFiddle
function ToString(obj) {
clearTimeout(window.ToStringTimeout);
var result;
var ident = arguments.length >= 2 ? arguments[1] : undefined;
if (obj == null) {
result = String(obj);
}
if (!result) {
window.ToStringRecursive = window.ToStringRecursive ? window.ToStringRecursive : [];
if (ToStringRecursive.indexOf(obj) >= 0) {
result = obj ? (typeof(obj) == "string" ? "\"" + obj + "\"" : obj.toString()) : obj;
} else {
ToStringRecursive.push(obj);
}
if (!result) {
switch (typeof obj) {
case "string":
result = '"' + obj + '"';
break;
case "function":
result = obj.name || obj.toString();
break;
case "object":
var indent = Array(ident || 1).join('\t'),
isArray = Array.isArray(obj);
result = '{[' [+isArray] + Object.keys(obj).map(
function(key) {
return '\n\t' + indent + key + ': ' + ToString(obj[key], (ident || 1) + 1);
}).join(',') + '\n' + indent + '}]' [+isArray];
break;
default:
result = obj.toString();
break;
}
}
}
window.ToStringTimeout = setTimeout(function() {
delete window.ToStringTimeout;
delete window.ToStringRecursive;
}, 100);
return result;
}
,並使用此:
console.log(ToString(new MyObject()));
爲了證明這一點:
{
prop1: "Hello World",
prop2: "LOL",
recursive: [object Object],
func: function() { return "func return"; }
}
檢查...當任何財產是遞歸的這一再顯示,因爲這是無限的。
'JSON.stringify(object)'...? – Damon
@Damon這是一個循環引用。 –
通常你使用'JSON.stringify(new MyObject())'。請注意,由於循環引用'this.recursive = this',它將不起作用,因爲它會永遠打印。要解決這個問題,你可以使用第二個參數,參見[這個答案](http://stackoverflow.com/a/9653082/3149020)。 –