Javascript - Шаблонные строки не красиво печатают объекты

1

Могу ли я использовать строки шаблонов ES6 для красивой печати объектов javascript? Это из проекта React Native, при этом console.log() выводит на инструменты отладки Chrome.

Что я хочу

const description = 'App opened';
const properties = { key1: 'val1', blah: 123 };
console.log('Description: ', description, '. Properties: ', properties);

выходы

Изображение 174551

Шаблон String Tryempt

// Same description and properties
const logString = 'Description: ${description}. Properties: ${properties}';
console.log(logString);

выходы

Изображение 174551

Вопрос

Как получить первый вывод (с красивой печатью) с использованием строк шаблонов?

  • 2
    Что вы имеете в виду? Вы не можете получить расширяемые объекты в консоли, когда вы записываете обычную строку. Решение очевидно, не записывайте строки, если хотите отображать их как объекты.
Теги:
ecmascript-6
string

4 ответа

6
Лучший ответ

Ваш первый пример фактически не выводит string на console. Обратите внимание, как properties передаются как отдельный аргумент параметра (поскольку он окружен запятыми , а не операторами строки-конкатенации +).

Когда вы передаете object (или любое значение JavaScript) для console в виде дискретного аргумента, он может отображать его, как он хочет, в том числе в виде интерактивного форматированного дисплея, который он делает в первом примере.

Во втором примере вы используете шаблонные строки, но это (как правило) эквивалентно этому:

logString = "Description: " + description.toString() + ". Properties: " + properties.toString()";

И Object.prototype.toString() по умолчанию возвращает [object Object].

Чтобы получить JSON (буквально обозначение объекта JavaScript), представление объекта, используемого в шаблонной строке, использует JSON.stringify:

logString = 'Description: ${ description }. Properties: ${ JSON.stringify( properties ) }.'

Или рассмотрите возможность расширения toString для ваших собственных типов:

myPropertiesConstructor.prototype.toString = function() {
    return JSON.stringify( this );
};
1

Могу ли я использовать строки шаблонов ES6 для красивой печати объектов javascript?

Конечно, но вам нужно преобразовать объект в довольно печатную версию, прежде чем передать его в литерал шаблона (я уверен, что есть библиотеки, которые делают это. Версия для бедных - JSON.stringify(obj, null, 2)).

Однако, поскольку console.log принимает произвольное количество аргументов, вы должны просто передать объект в качестве второго аргумента, чтобы он не преобразовывался в строку:

const logString = 'Description: ${description}. Properties:';
console.log(logString, properties);
0

вы можете попробовать это your message ${JSON.stringify(object)}

-1
const logString = 'Description: ${description}. Properties: ${JSON.stringify(properties, null, 2)}';
console.log(logString);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню