Преобразование объекта в строку - PullRequest
904 голосов
/ 10 апреля 2011

Как я могу преобразовать объект JavaScript в строку?

Пример:

var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)

Выход:

Object {a = 1, b = 2} // очень хороший читаемый вывод:)
Item: [object Object] // не знаю, что внутри: (

Ответы [ 33 ]

1268 голосов
/ 10 апреля 2011

Я бы рекомендовал использовать JSON.stringify, который преобразует набор переменных в объекте в строку JSON.Большинство современных браузеров изначально поддерживают этот метод, но для тех, которые этого не делают, вы можете включить версию JS :

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);
92 голосов
/ 15 апреля 2016

Используйте функцию javascript String ().

 String(yourobject); //returns [object Object]

или

JSON.stringify(yourobject)

.

85 голосов
/ 10 апреля 2011

Конечно, чтобы преобразовать объект в строку, вы должны либо использовать свой собственный метод, такой как:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

На самом деле, вышеприведенное просто показывает общий подход;вы можете использовать что-то вроде http://phpjs.org/functions/var_export:578 или http://phpjs.org/functions/var_dump:604

или, если вы не используете методы (функции как свойства вашего объекта), вы можете использовать новый стандарт (но не реализовано в старых браузерах, хотя вы можете найти утилиту, которая поможет с этим и для них), JSON.stringify ().Но опять же, это не сработает, если объект использует функции или другие свойства, которые не сериализуются в JSON.

73 голосов
/ 07 января 2015

Проще говоря с console, вы можете просто использовать запятую вместо +.+ попытается преобразовать объект в строку, а запятая отобразит его отдельно в консоли.

Пример:

var o = {a:1, b:2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o);   // :)

Вывод:

Object { a=1, b=2}           // useful
Item: [object Object]        // not useful
Item:  Object {a: 1, b: 2}   // Best of both worlds! :)

Ссылка: https://developer.mozilla.org/en-US/docs/Web/API/Console.log

32 голосов
/ 10 апреля 2011

РЕДАКТИРОВАТЬ Не используйте этот ответ, так как он не работает в Internet Explorer.Используйте Gary Chambers решение.

toSource () - это функция, которую вы ищете, которая запишет ее в формате JSON.

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());
31 голосов
/ 19 июня 2015

Один вариант :

console.log('Item: ' + JSON.stringify(o));

o is printed as a string

Другой вариант (как указано в комментариях soktinpk ) и лучше для отладки консоли IMO:

console.log('Item: ', o);

o is printed as an object, which you could drill down if you had more fields

20 голосов
/ 22 августа 2013

Ни одно из решений здесь не сработало для меня. Кажется, 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', а также не добавлять лишние запятые.

Используйте это на свой страх и риск, так как я не проверял это вообще. Не стесняйтесь предлагать любые дополнительные улучшения в качестве комментария.

19 голосов
/ 14 августа 2014

Если вы просто выводите данные на консоль, вы можете использовать console.log('string:', obj).Обратите внимание на запятую .

15 голосов
/ 11 июля 2013

В тех случаях, когда вы знаете, что объект представляет собой просто логическое значение, дату, строку, число и т. Д. Функция javascript String () работает просто отлично.Недавно я обнаружил, что это полезно при работе со значениями из функции $ .each в jquery.

Например, следующий код преобразует все элементы в значении в строку:

$.each(this, function (name, value) {
  alert(String(value));
});

Подробнеездесь:

http://www.w3schools.com/jsref/jsref_string.asp

13 голосов
/ 08 мая 2017
var obj={
name:'xyz',
Address:'123, Somestreet'
 }
var convertedString=JSON.stringify(obj) 
 console.log("literal object is",obj ,typeof obj);
 console.log("converted string :",convertedString);
 console.log(" convertedString type:",typeof convertedString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...