簡體   English   中英

JavaScript ES6-具有模板文字的console.log

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM