[英]Javascript ES6 console.log object using template literal
[英]JavaScript ES6 - console.log with template literal
我正在写连接到mongo数据库的节点脚本。
我注意到,通过console.log
语法的少量更改,打印错误响应有所不同。 下面的例子应该更有意义。
#!/usr/bin/env node
const mongoose = require("mongoose");
const config = require("./config");
mongoose.connect(config.dbURI, (err) => {
if (err) {
console.log(`${err}`); // First console.log
console.log(err); // Second console.log
} else {
console.log(`Database connection successful`)
}
});
第一个console.log
示例输出
MongoError: Authentication failed.
第二个console.log
示例输出
{ MongoError: Authentication failed.
at Function.MongoError.create (/Users/sigo/Sources/crypto-change/node_modules/mongodb-core/lib/error.js:31:11)
at /Users/sigo/Sources/crypto-change/node_modules/mongodb-core/lib/connection/pool.js:489:72
at authenticateStragglers (/Users/sigo/Sources/crypto-change/node_modules/mongodb-core/lib/connection/pool.js:435:16)
at Connection.messageHandler (/Users/sigo/Sources/crypto-change/node_modules/mongodb-core/lib/connection/pool.js:469:5)
at Socket.<anonymous> (/Users/sigo/Sources/crypto-change/node_modules/mongodb-core/lib/connection/connection.js:321:22)
at emitOne (events.js:96:13)
at Socket.emit (events.js:191:7)
at readableAddChunk (_stream_readable.js:178:18)
at Socket.Readable.push (_stream_readable.js:136:10)
at TCP.onread (net.js:563:20)
name: 'MongoError',
message: 'Authentication failed.',
ok: 0,
code: 18,
errmsg: 'Authentication failed.' }
这种差异从何而来?
${err}
(或'' + err
”)将用字符串插入err
对象,这也会将您的Error对象更改为字符串-等效于调用err.toString() 。 但是,直接记录err
会将其作为对象传递到控制台并以这种方式显示。
这就是所谓的“隐式强制”-如果您想进一步了解该主题,我强烈建议您阅读《不懂JS:类型和语法》(第4章:强制)以进行深入研究。
通过插入模板字符串, err
对象将使用其自己的.toString
方法转换为字符串,该方法继承自Error.prototype.toString
。 该代码等效于
console.log(String(err));
console.log(err.toString());
将err
对象直接传递到console.log
方法时 ,它改用node的inspect
函数 ,该代码等效于
console.log(util.inspect(err));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.