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

Javascript:%s或%d表示字符串?,javascript,ecmascript-6,passport.js,Javascript,Ecmascript 6,Passport.js,有人能解释一下这里发生了什么事吗?我看到了%d和%s,但我没有看到这些在代码中的任何其他地方声明或编写的。这在javascript中到底意味着什么?我假设这是一种我从未见过的字符串模板 passport.deserializeUser( (id,done)=>{ 调试('将反序列化用户。id=%d',id) User.findById(id) 。然后(用户=>{ 调试('反序列化用户id=%d',用户id) 完成(空,用户) }) .catch(错误=>{ 调试('反序列化失败错误=%s',错

有人能解释一下这里发生了什么事吗?我看到了
%d
%s
,但我没有看到这些在代码中的任何其他地方声明或编写的。这在javascript中到底意味着什么?我假设这是一种我从未见过的字符串模板

passport.deserializeUser(
(id,done)=>{
调试('将反序列化用户。id=%d',id)
User.findById(id)
。然后(用户=>{
调试('反序列化用户id=%d',用户id)
完成(空,用户)
})
.catch(错误=>{
调试('反序列化失败错误=%s',错误)
完成(错误)
})
}

)
这可能是debug()的特定内容,因为Javascript中没有内置的字符串格式(没有库也不行)

但是,%d被整数替换,%s被字符串替换。例如:

debug("I'm %s and I'm %d years old", "John", 10)
我是约翰,今年10岁


如果您感兴趣,可以使用以下库:

您看到的是
console.log()
console.debug()
中内置的字符串替换模式

模式如下所示:

%s
用于字符串

编号为
%d
%i

%f
用于浮点

对象的
%o

%j
用于JSON

因此,本质上您是在用提供的值替换说明符,如下所示:

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

console.debug('Hi, my name is %s.', name);
// Hi, my name is Chris.
文件:

  • 铬:
  • 火狐:
  • 即:
  • Node.js:
  • 规格:
console.log()
console.debug()
使用printf样式的格式。以下是官方支持的格式化程序:

格式化程序表示:

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

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

node debug [script.js | -e "script" | <host>:<port>] command
节点调试[script.js |-e“script”|::]命令

输出格式说明符%d%s等来自ANSI C 所以它通过一个库进入节点——在本例中是util.format
对于像
%03d
这样的简单格式,
lodash.padStart
就可以完成这项工作

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

您可以为使用CSS记录文本提供样式

console.log("%c YourText", "color:blue; font-weight:bold;");
可以为不同的控制台日志文本创建多种样式

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

它不是JavaScript的一部分,只是一些
debug
解释的东西。什么是调试?(可能是利用了节点的内置功能。)@Ryan有趣。。。它是一个npm模块,看起来像是
util.format
正是它所使用的。这只是console对象功能的一部分,大概是
debug
正在使用的。结果写在调试控制台中。只需打开您的命令行或终端,并使用此
节点调试[script.js |-e“script”|::]
命令运行它。谢谢@Bruno,yea debug是npm模块npmjs.com/package/debugload来帮助@Anna!从什么时候起,这就成为console.log!的一部分了!?哇,我不敢相信我以前从未听说过。我不太确定这已经有多久了;然而,我知道它或多或少是特定于浏览器的。尽管如此,它还是有局限性的,因为每个“现代”浏览器都有自己的JavaScript调试处理程序/应用程序。基本上,这是JavaScript实现自己版本的printf。搜索一下printf;它起源于很久以前。这是最基本的字符串模板。它有点像regex,因为它是一种嵌入到几乎所有成熟编程语言中的小型语言。它的标准化程度要低得多,但这并不是什么大问题,因为它非常简单。另一个出现在我脑海中的是转义码,如
\n
\s
等,它们在几乎所有的语言中都是字符串文本。我运行了该命令,但出现了错误:-bash:-e:command not found-bash:host:没有这样的文件或目录(节点:62955)节点的调试器中存在内部错误。请报告这个错误。写入EPIPE错误:在导出时写入EPIPE。_errnoException(util.js:1022:11)在WriteWrap.afterWrite[as oncomplete](net.js:804:14)您正在使用Windows的哪个环境,Linux还是Mac?@Tecci我正在使用Mac,然后我建议使用以下命令安装
节点检查器
sudo npm install-g node inspector--unsafe perm
这真令人印象深刻!这在哪里有记录?如果没有你的回答,我就无法理解%c的作用。我在规范中找到了%c,但它没有完全指定。