Могу ли я использовать строки шаблонов ES6 для красивой печати объектов javascript? Это из проекта React Native, при этом console.log()
выводит на инструменты отладки Chrome.
const description = 'App opened';
const properties = { key1: 'val1', blah: 123 };
console.log('Description: ', description, '. Properties: ', properties);
выходы
// Same description and properties
const logString = 'Description: ${description}. Properties: ${properties}';
console.log(logString);
выходы
Как получить первый вывод (с красивой печатью) с использованием строк шаблонов?
Ваш первый пример фактически не выводит 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 );
};
Могу ли я использовать строки шаблонов ES6 для красивой печати объектов javascript?
Конечно, но вам нужно преобразовать объект в довольно печатную версию, прежде чем передать его в литерал шаблона (я уверен, что есть библиотеки, которые делают это. Версия для бедных - JSON.stringify(obj, null, 2)
).
Однако, поскольку console.log
принимает произвольное количество аргументов, вы должны просто передать объект в качестве второго аргумента, чтобы он не преобразовывался в строку:
const logString = 'Description: ${description}. Properties:';
console.log(logString, properties);
вы можете попробовать это your message ${JSON.stringify(object)}
const logString = 'Description: ${description}. Properties: ${JSON.stringify(properties, null, 2)}';
console.log(logString);