Ни одно из решений здесь не сработало для меня. Кажется, JSON.stringify - это то, что говорят многие люди, но он отключает функции и выглядит довольно испорченным для некоторых объектов и массивов, которые я пробовал при тестировании.
Я создал собственное решение, которое работает как минимум в Chrome. Разместив его здесь, вы можете найти его в Google.
//Make an object a string that evaluates to an equivalent object
// Note that eval() seems tricky and sometimes you have to do
// something like eval("a = " + yourString), then use the value
// of a.
//
// Also this leaves extra commas after everything, but JavaScript
// ignores them.
function convertToText(obj) {
//create an array that will later be joined into a string.
var string = [];
//is object
// Both arrays and objects seem to return "object"
// when typeof(obj) is applied to them. So instead
// I am checking to see if they have the property
// join, which normal objects don't have but
// arrays do.
if (typeof(obj) == "object" && (obj.join == undefined)) {
string.push("{");
for (prop in obj) {
string.push(prop, ": ", convertToText(obj[prop]), ",");
};
string.push("}");
//is array
} else if (typeof(obj) == "object" && !(obj.join == undefined)) {
string.push("[")
for(prop in obj) {
string.push(convertToText(obj[prop]), ",");
}
string.push("]")
//is function
} else if (typeof(obj) == "function") {
string.push(obj.toString())
//all other values can be done with JSON.stringify
} else {
string.push(JSON.stringify(obj))
}
return string.join("")
}
РЕДАКТИРОВАТЬ: Я знаю, что этот код может быть улучшен, но просто не удосужился сделать это. Пользователь andrey предложил улучшение здесь с комментарием:
Вот немного измененный код, который может обрабатывать 'null' и 'undefined', а также не добавлять лишние запятые.
Используйте это на свой страх и риск, так как я не проверял это вообще. Не стесняйтесь предлагать любые дополнительные улучшения в качестве комментария.