2017-02-23 6 views
10

Может кто-нибудь объяснить, что здесь происходит? Я вижу %d и %s, но я не вижу этих объявленных или написанных где-либо еще в коде. Что, черт возьми, это означает/делает в javascript? Я предполагаю, что это какой-то строковый шаблон, который я никогда раньше не видел?Javascript:% s или% d представляет строку?

passport.deserializeUser(
 
    (id, done) => { 
 
    debug('will deserialize user.id=%d', id) 
 
    User.findById(id) 
 
     .then(user => { 
 
     debug('deserialize did ok user.id=%d', user.id) 
 
     done(null, user) 
 
     }) 
 
     .catch(err => { 
 
     debug('deserialize did fail err=%s', err) 
 
     done(err) 
 
     }) 
 
    } 
 
)

+2

Это не часть JavaScript, просто похоже на то, что интерпретируется 'debug'. Что такое 'debug'? (Возможно, он использует встроенный модуль [util.format] Node (https://nodejs.org/api/util.html#util_util_format_format_args).) – Ryan

+0

@Ryan интересный ... это модуль npm https: // www.npmjs.com/package/debug - и выглядит так: 'util.format' - это именно то, что он использует. – Turnipdabeets

+0

Это лишь часть функциональности объекта консоли, который, предположительно, используется 'debug'. – 1252748

ответ

15

То, что вы видите, есть шаблоны подстановки строк, которые встроены в console.log() или console.debug().

Картина идет как я представлена ​​ниже:

% sдля значения струнного

% dили% ядля значения Integer

% fдля числа с плавающей запятой

% одля гиперссылкой объекта

Поэтому в основном вы заменяете значения со значениями, поставляемых в виде так:

var name = 'Chris'; 
console.log('Hi, my name is %s.', name); 
//Output: Hi, my name is Chris. 

console.debug('Hi, my name is %s.', name); 
//Output: Hi, my name is Chris. 
+0

С каких это пор это было частью console.log !? Ничего себе, я не могу поверить, что я никогда не слышал об этом раньше. – Turnipdabeets

+0

Я не совсем уверен, как долго это было вокруг; однако я знаю, что он более или менее специфичен для браузера. С учетом этого существуют ограничения, так как каждый «современный» браузер имеет свой собственный обработчик/приложение для отладки JavaScript. –

1

Это, вероятно, что-то конкретное из отладки(), так как нет встроенной строки форматирования в Javascript (не без библиотеки).

Однако,% d заменяется целым числом, а% s заменяется на строку. Пример:

debug("I'm %s and I'm %d years old", "John", 10) 

Должен ли печатать: Я Джон и мне 10 лет.

Вот библиотека, вы можете использовать, если вы заинтересованы: http://www.diveintojavascript.com/projects/javascript-sprintf

+0

Спасибо @Bruno, да debug - модуль npm npmjs.com/package/debug – Turnipdabeets

+0

Рад помочь @ Анна! –

1

console.log() и console.debug() используйте форматирование в формате printf. Ниже перечислены официально поддерживаемые форматтеры:

Formatter представление:

  • %O Довольно-печать объекта на несколько строк.
  • %o Pretty-print a Object all на одной строке.
  • %s String.
  • %d Номер (оба целых и поплавок).
  • %j JSON. Заменяется строкой «[Циркуляр]», если аргумент содержит круглые ссылки.
  • %% Одиночный знак процента ('%'). Это не требует аргумента.

Результаты написаны на консоли отладки. просто откройте командную строку или терминал и запустить его с помощью этого:

node debug [script.js | -e "script" | <host>:<port>] command 
+0

Я выполнил команду, но я получаю ошибки: -bash: -e: команда не найдена -bash: host: Нет такого файла или каталога (node: 62955) В отладчике узла появилась внутренняя ошибка. Сообщите об этой ошибке. записи EPIPE Ошибка: написать EPIPE на exports._errnoException (util.js: 1022: 11) в WriteWrap.afterWrite [как OnComplete] (net.js: 804: 14) – Turnipdabeets

+0

Какие среды вы используете Windows, Linux или Mac? – Teocci

+0

@Tecci Я использую mac – Turnipdabeets

Смежные вопросы