node.js中的console.log列印的信息到底是什麼?
當console.log一個對象的時候,為什麼會列印出「多餘」的信息,
即:不僅僅列印的是 一個對象的 key:value, 還有其他信息。
最經典的就是—————— 列印異常對象的時候,會列印出多餘的信息來。
我的問題是:console.log(對象);, 到底做了什麼? 或者說輸出到控制台的信息取決於什麼?
首先要知道 console.log 這些並不是 JavaScript 中的內容,一個 JavaScript 引擎不實現 console.log 也是完全合法的。
另外關於 Console API 的規範中,直接說明了具體輸出是未定義行為:
Its main output is the implementation-defined side effect of printing the result to the console.
所以即便 Node.js 遵循了這個規範(原則上 Node.js 並不一定需要遵循 WHATWG 的這些 Web 規範),怎麼顯示也只是自己的喜好,哪怕在不同版本之間甚至 Node-V8 與 Node-ChakraCore 之間產生不同的輸出都沒有問題。
至於當前的輸出方式,很容易在源碼中找到:
Console.prototype.log = function log(...args) {
write(this._ignoreErrors,
this._stdout,
util.format.apply(null, args),
this._stdoutErrorHandler,
this[kGroupIndent]);
};
然後順著 util.format 等等內容找下去就好。
輸出什麼取決於 console.log 如何處理你給他的對象。
你說的異常對象本身就帶了輸出的那些數據欄位,只是你以為沒有。推薦閱讀:
※什麼是 GraphQL?
※前後端使用同一種編程語言有什麼優勢和劣勢?
※Expressjs 生成的NodeJS網站,用「npm start」可以啟動訪問,forever 或者 pm2 可以啟動,但是無法訪問?
※如何在Node.js或TypeScript中實現for..of形式的按行讀文件?
※為什麼nodejs不給每一個.js文件以獨立的上下文來避免作用域被污染?
TAG:Nodejs |