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
JSON。如果参数包含循环引用,则替换为字符串“[Circular]”%j
单百分号(“%”)。这不会消耗参数%%
结果将写入调试控制台。只需打开命令行或终端并使用以下命令运行它:
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,但它没有完全指定。