[英]How console.log(object) works in background?
我有這個代碼:
const obj = {name: 'maro', age: 77}
console.log(obj); // it logs { name: 'maro', age: 77 }
這似乎很明顯。 但我想知道 console?log 內部是如何工作的:它調用了哪些“obj”方法來獲取“{ name, 'maro': age: 77 }”
obj 包含這些屬性:
obj.__defineGetter__ obj.__defineSetter__ obj.__lookupGetter__ obj.__lookupSetter__ obj.__proto__ obj.constructor obj.hasOwnProperty
obj.isPrototypeOf obj.propertyIsEnumerable obj.toLocaleString obj.toString obj.valueOf obj.age obj.name
但他們都沒有返回“{ name: 'maro', age: 77 }”!
甚至obj.toString()
返回'[object Object]'
如果我沒記錯的話,它是obj.valueOf()
。 這是文檔: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf
正如您在Node.js console.log
文檔中看到的那樣,它在幕后使用util.format
來格式化其 output。
根據util.format
文檔,它返回 object 的字符串表示形式,具有通用 JavaScript object 格式,類似於util.inspect
。
你可以看到它的實際實現,至少對於Node.js ,這里: https://github.com/nodejs/node/blob/75dc8938a40100a53323ed87159a1562f149ceca/lib1/ 閱讀這段代碼玩得開心:)
您可以使用 valueOf()。
const object1 = {name:"ankit",age:27}
console.log(object1.valueOf());
注意:字符串上下文中的對象通過 toString() 方法進行轉換,這與使用 valueOf 轉換為字符串基元的字符串對象不同。 所有對象都有字符串轉換,如果只有“[對象類型]”。 但是很多對象不會轉換為數字,boolean,或 function。
如果你需要名字 'maro' 和年齡 77,你需要使用 obj.name 和 obj.age...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.