Một bản tổng hợp của nhiều câu trả lời hữu ích từ (ít nhất) Node.js v0.10.33
(ổn định) / v0.11.14
(không ổn định) có lẽ thông qua (ít nhất) v7.7.4
(phiên bản hiện tại kể từ bản cập nhật mới nhất cho câu trả lời này). Mẹo đội mũ cho Rory O'Kane nhờ giúp đỡ.
tl; dr
Để có được đầu ra mong muốn cho ví dụ trong câu hỏi, hãy sử dụng console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Tại sao không util.inspect()
? Bởi vì nó đã ở trung tâm của đầu ra chẩn đoán: console.log()
và console.dir()
cũng như Node.js REPL sử dụng util.inspect()
ngầm . Nói chung là không cần thiếtrequire('util')
và gọi util.inspect()
trực tiếp.
Chi tiết bên dưới.
- REPL : in ngầm định bất kỳ giá trị trả về của biểu thức
util.inspect()
với màu cú pháp ;
tức là, chỉ cần gõ tên của một biến và nhấn Enter sẽ in một phiên bản được kiểm tra về giá trị của nó; ví dụ:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
tự động in các biểu diễn đối tượng và mảng , nhưng chỉ tạo ra đầu ra đa dòng khi cần .
Hành vi in đẹp có thể được kiểm soát bởi thuộc compact
tính trong options
đối số tùy chọn ; false
sử dụng đầu ra đa dòng vô điều kiện , trong khi true
vô hiệu hóa hoàn toàn in ấn; nó cũng có thể được đặt thành một số (mặc định là 3
) để điều khiển hành vi đa dòng có điều kiện - xem tài liệu .
Theo mặc định, đầu ra được bọc ở khoảng 60 ký tự , cảm ơn, Shrey
, bất kể đầu ra được gửi đến một tệp hay thiết bị đầu cuối. Trong thực tế, vì ngắt dòng chỉ xảy ra ở ranh giới thuộc tính , bạn sẽ thường kết thúc bằng các dòng ngắn hơn, nhưng chúng cũng có thể dài hơn (ví dụ: với các giá trị thuộc tính dài).
Trong v6.3.0 +, bạn có thể sử dụng breakLength
tùy chọn để ghi đè giới hạn 60 ký tự; nếu bạn đặt nó vào Infinity
, tất cả mọi thứ là sản lượng trên một đơn dòng.
Nếu bạn muốn kiểm soát nhiều hơn đối với in đẹp, hãy cân nhắc sử dụng JSON.stringify()
với đối số thứ 3 , nhưng lưu ý những điều sau:
- Thất bại với các đối tượng có tham chiếu vòng tròn , chẳng hạn như
module
trong bối cảnh toàn cầu.
- Phương pháp (chức năng) sẽ theo thiết kế KHÔNG được bao gồm.
- Bạn không thể chọn hiển thị các thuộc tính ẩn (không thể liệt kê).
- Cuộc gọi ví dụ:
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
đối tượng tùy chọn (đối số thứ 2):
Một đối tượng tùy chọn tùy chọn có thể được thông qua làm thay đổi các khía cạnh nhất định của chuỗi được định dạng; một số thuộc tính được hỗ trợ là:
Xem các tài liệu Node.js mới nhất để biết danh sách đầy đủ, hiện tại.
showHidden
- nếu
true
, thì các thuộc tính không thể đếm được của đối tượng [những thuộc tính được chỉ định không hiển thị khi bạn sử dụng for keys in obj
hoặc Object.keys(obj)
] cũng sẽ được hiển thị. Mặc định cho false
.
depth
- cho biết kiểm tra bao nhiêu lần để lặp lại trong khi định dạng đối tượng. Điều này rất hữu ích để kiểm tra các đối tượng phức tạp lớn. Mặc định là 2. Để làm cho nó lặp lại vô thời hạn, hãy vượt qua
null
.
colors
- nếu đúng, thì đầu ra sẽ được tạo kiểu với mã màu ANSI. Mặc định cho
false
. Màu sắc có thể tùy chỉnh [Khác - xem liên kết].
customInspect
- nếu
false
, thì các inspect()
hàm tùy chỉnh được xác định trên các đối tượng được kiểm tra sẽ không được gọi. Mặc định cho true
.
util.format()
giữ chỗ chuỗi định dạng (đối số thứ nhất)
Một số trình giữ chỗ được hỗ trợ là:
Xem các tài liệu Node.js mới nhất để biết danh sách đầy đủ, hiện tại.
%s
- Chuỗi.
%d
- Số (cả số nguyên và số float).
%j
- JSON.
%%
- dấu phần trăm đơn ('%'). Điều này không tiêu thụ một đối số.