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
Ответ 4
Выходные параметры формата%% d% s и т.д. поступают от ANSI C
поэтому он входит в node через библиотеку - в этом случае util.format
https://nodejs.org/api/util.html#util_util_format_format_args
Ответ 5
для простого формата, такого как %03d
, lodash.padStart
может просто сделать эту работу.
_.padStart(x, 3, '0')