การรวบรวมคำตอบที่มีประโยชน์มากมายจาก (อย่างน้อย) Node.js v0.10.33
(เสถียร) / v0.11.14
(ไม่แน่นอน) สันนิษฐานผ่าน (อย่างน้อย) v7.7.4
(รุ่นปัจจุบันเป็นของการอัปเดตล่าสุดสำหรับคำตอบนี้) เคล็ดลับหมวกกับRory O'Kaneเพื่อขอความช่วยเหลือ
TL; DR
เพื่อให้ได้ผลลัพธ์ที่ต้องการสำหรับตัวอย่างในคำถามใช้console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
ทำไมutil.inspect()
ล่ะ เพราะมันมีอยู่แล้วที่เป็นหัวใจของการส่งออกการวินิจฉัย: console.log()
และconsole.dir()
เช่นเดียวกับ Node.js REPL ใช้util.inspect()
โดยปริยาย โดยทั่วไปไม่จำเป็นต้องrequire('util')
โทรออกutil.inspect()
โดยตรง
รายละเอียดด้านล่าง
- REPL : ปริยายพิมพ์ค่าตอบแทนการแสดงออกใด ๆ กับ
util.inspect()
ที่มี สีไวยากรณ์ ;
เช่นเพียงพิมพ์ชื่อตัวแปรแล้วกด Enter จะพิมพ์ค่าที่ตรวจสอบแล้วของรุ่นนั้น เช่น:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
โดยอัตโนมัติสวยพิมพ์วัตถุและอาร์เรย์การแสดงแต่ผลิตหลายเอาท์พุทเมื่อจำเป็นเท่านั้น
คุณสมบัติการพิมพ์แบบสวยสามารถควบคุมได้โดยcompact
คุณสมบัติในoptions
อาร์กิวเมนต์ที่เป็นทางเลือก false
ใช้เอาต์พุตหลายบรรทัดโดยไม่มีเงื่อนไขในขณะที่true
ปิดใช้งานการพิมพ์ที่สวยงามทั้งหมด ก็ยังสามารถตั้งค่าให้เป็นจำนวน (เริ่มต้นคือ3
) เพื่อควบคุมพฤติกรรมหลายสายเงื่อนไข - ดูเอกสาร
โดยค่าเริ่มต้นการส่งออกจะอยู่ที่ประมาณ 60 ตัวอักษรขอบคุณShrey
ไม่ว่าจะส่งออกไปยังไฟล์หรือเทอร์มินัลก็ตาม ในทางปฏิบัติเนื่องจากการขึ้นบรรทัดใหม่เกิดขึ้นที่ขอบเขตคุณสมบัติเท่านั้นคุณมักจะจบลงด้วยเส้นที่สั้นกว่า แต่ก็สามารถยาวขึ้นได้เช่นกัน
ใน v6.3.0 + คุณสามารถใช้breakLength
ตัวเลือกเพื่อแทนที่ขีด จำกัด 60 อักขระ หากคุณตั้งค่าเป็นInfinity
ทุกสิ่งจะแสดงผลในบรรทัดเดียว
หากคุณต้องการควบคุมการพิมพ์ที่น่าดึงดูดยิ่งขึ้นลองพิจารณาใช้JSON.stringify()
กับอาร์กิวเมนต์ที่ 3แต่ให้สังเกตสิ่งต่อไปนี้:
- ล้มเหลวกับวัตถุที่มีการอ้างอิงแบบวงกลมเช่น
module
ในบริบทส่วนกลาง
- วิธีการ (ฟังก์ชั่น) จะไม่รวมอยู่ในการออกแบบ
- คุณไม่สามารถเลือกที่จะแสดงคุณสมบัติที่ซ่อนอยู่ (ไม่นับ)
- ตัวอย่างการโทร:
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
วัตถุตัวเลือก (อาร์กิวเมนต์ที่ 2):
วัตถุตัวเลือกที่เป็นทางเลือกอาจถูกส่งผ่านที่เปลี่ยนแปลงลักษณะบางอย่างของสตริงที่จัดรูปแบบ คุณสมบัติบางอย่างที่รองรับคือ:
ดูเอกสารล่าสุดของ Node.jsสำหรับรายการปัจจุบันทั้งหมด
showHidden
- ถ้า
true
คุณสมบัติของวัตถุที่ไม่นับจำนวน [ที่ถูกกำหนดให้ไม่แสดงเมื่อคุณใช้งานfor keys in obj
หรือObject.keys(obj)
] จะแสดงด้วย เริ่มfalse
ต้นที่
depth
- บอกให้ตรวจสอบจำนวนครั้งในการเรียกคืนในขณะที่จัดรูปแบบวัตถุ สิ่งนี้มีประโยชน์สำหรับการตรวจสอบวัตถุที่ซับซ้อนขนาดใหญ่ เริ่มต้นที่ 2 ที่จะทำให้มัน recurse ไปเรื่อย ๆ
null
ผ่าน
colors
- ถ้าเป็นจริงผลลัพธ์จะถูกจัดรูปแบบด้วยรหัสสี ANSI เริ่ม
false
ต้นที่ สีสามารถปรับแต่งได้ [… - ดูลิงค์]
customInspect
- ถ้าฟังก์ชั่นที่
false
กำหนดเองที่inspect()
กำหนดไว้ในวัตถุที่กำลังตรวจสอบจะไม่ถูกเรียก เริ่มtrue
ต้นที่
util.format()
ตัวยึดรูปแบบสตริง (อาร์กิวเมนต์ที่ 1)
ตัวยึดบางตัวที่รองรับคือ:
ดูเอกสารล่าสุดของ Node.jsสำหรับรายการปัจจุบันทั้งหมด
%s
- สตริง
%d
- จำนวน (ทั้งจำนวนเต็มและลอย)
%j
- JSON
%%
- เครื่องหมายเปอร์เซ็นต์เดียว ('%') สิ่งนี้ไม่ใช้การโต้แย้ง