Javascript:%s或%d代表字符串?

时间:2017-02-23 02:53:56

标签: javascript ecmascript-6 passport.js

有人可以解释一下这里发生了什么吗?我看到%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)
      })
  }
)

6 个答案:

答案 0 :(得分:29)

您看到的是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.

答案 1 :(得分:3)

console.log()console.debug()使用printf样式格式。以下是官方支持的格式化程序:

格式化程序表示:

  • %O在多行上打印一个对象。
  • %o在一行上打印一个对象。
  • %s字符串。
  • %d数字(包括整数和浮点数)。
  • %j JSON。如果参数包含循环引用,则替换为字符串'[Circular]'。
  • %%单个百分号('%')。这不会消耗论据。

结果写在调试控制台中。只需打开命令行或终端并使用以下命令运行它:

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

答案 2 :(得分:2)

您可以指定一种样式来使用CSS记录文本。

console.log("%c YourText", "color:blue; font-weight:bold;");

您可以为不同的控制台日志文本创建多种样式。

console.log("%c Text1 %c Text2 %c Text3", "color:red;", "color:green;", "color:blue;");

答案 3 :(得分:1)

这可能是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 :(得分:0)

%输出格式说明符%d%s等来自ANSI C. 因此它通过库进入节点 - 在本例中为util.format https://nodejs.org/api/util.html#util_util_format_format_args

答案 5 :(得分:0)

对于%03d这样的简单格式,lodash.padStart可以完成工作。

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