Javascript:% s или% d представляет строку?

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

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)
      })
  }
)

Ответ 1

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

Шаблон идет так, как я представил ниже:

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

% d или % i для целочисленного значения

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

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

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

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.

Ответ 2

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

Форматирование:

  • %O Довольно печатать объект на нескольких строках.
  • %O Довольно распечатать объект на одной строке.
  • %s Строка.
  • %d Число (как целое число, так и float).
  • %j JSON. Заменяется на строку "[Circular]", если аргумент содержит круглые ссылки.
  • %% Знак одиночного процента ('%'). Это не требует аргумента.

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

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

Ответ 3

Это, вероятно, что-то специфическое для debug(), поскольку в Javascript нет встроенного форматирования строк (не без библиотеки).

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

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

Должен печатать: я Джон, мне 10 лет.

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

Ответ 5

для простого формата, такого как %03d, lodash.padStart может просто сделать эту работу.

_.padStart(x, 3, '0')