Làm cách nào để hiển thị một đối tượng JavaScript?


1617

Làm cách nào để hiển thị nội dung của một đối tượng JavaScript theo định dạng chuỗi như khi chúng ta alertbiến?

Cách định dạng tương tự tôi muốn hiển thị một đối tượng.


7
Bạn vui lòng sắp xếp lại câu hỏi của bạn? Bạn có ý nghĩa gì bởi "cách định dạng"? Như trong, với định dạng phong phú, như in đậm / in nghiêng / vv?
Sasha Chedygov

Có cách nào để hiển thị giá trị thời gian chạy của một biến bằng cách in giá trị của biến bằng một số lệnh console không?
BlackPanther

1
@BlackPanther Chỉ cần làm console.log("", yourObject1, yourObject2, yourObject3, etc...);. Một phiên bản ngắn hơn là chỉ để làm console.log(yourObject1, yourObject2, etc...);.
tom_mai78101

2
Bạn có thể vui lòng chọn một câu trả lời tốt hơn phản ánh chính xác hơn sự đồng thuận của cộng đồng không?
Hold OfferHunger

Như thế nàyconsole.log('a string', aNumber, anObject)
onmyway133

Câu trả lời:


1068

Nếu bạn muốn in đối tượng cho mục đích gỡ lỗi, hãy sử dụng mã:

var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)

sẽ hiển thị:

giao diện điều khiển màn hình chrome

Lưu ý: bạn chỉ phải đăng nhập đối tượng. Ví dụ, điều này sẽ không hoạt động:

console.log('My object : ' + obj)

Lưu ý ' : Bạn cũng có thể sử dụng dấu phẩy trong logphương thức, sau đó dòng đầu tiên của đầu ra sẽ là chuỗi và sau đó đối tượng sẽ được hiển thị:

console.log('My object: ', obj);

43
Chức năng đó cũng hoạt động trên Google Chrome khi sử dụng Bảng điều khiển JavaScript (Shift + Control + J hoặc Shift + Control + I, tùy thuộc vào phiên bản Chrome). Cũng lưu ý rằng nó cũng console.log(obj1, obj2)hoạt động rất độc đáo, vì vậy bạn không phải gọi console.log()cho mọi đối tượng khi đăng nhập nhiều biến. Ngoài ra, luôn nhớ xóa tất cả các cuộc gọi như vậy trong sản xuất, vì nó sẽ phá vỡ các trình duyệt không thực hiện nó (chẳng hạn như Internet Explorer).
Felix

102
Có, nó in [Object Object] nhưng nó có một nút mở rộng nhỏ bên cạnh nó cho phép bạn kiểm tra nội dung của đối tượng.
hughes

12
@hughes nó thực sự có thể làm cả hai. tôi có một đối tượng tôi đã tạo với: var obj = {"foo": false}; và một đối tượng khác đang được chuyển vào một cuộc gọi lại từ một máy chủ, một đối tượng được truyền qua các cuộc gọi lại được in bằng mũi tên nhỏ để bạn có thể mở nó lên, đối tượng được tạo tĩnh chỉ in [Object Object] không có mũi tên. Tôi đang cố gắng để tìm ra điều này quá, bất kỳ suy nghĩ khác?
benstraw

124
console.log("id:"+obj);Sẽ không xuất ra chính xác vì nó xuất ra một chuỗi như bạn thấy ở đó, bạn cần chỉ định nó như thế này:console.log("id:"); console.log(obj);
Anriëtte Myburgh

14
Hãy thử console.log(JSON.stringify(obj))hoặcconsole.dir(obj)
Robot Boy

2012

Sử dụng JSON.stringifyphương pháp bản địa . Hoạt động với các đối tượng lồng nhau và tất cả các trình duyệt chính hỗ trợ phương pháp này.

str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()

Liên kết với Mozilla API Reference và các ví dụ khác.

obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)

Sử dụng trình thay thế JSON.opesify tùy chỉnh nếu bạn gặp phải lỗi Javascript này

"Uncaught TypeError: Converting circular structure to JSON"

327
Để có đầu ra dễ đọc hơn, hãy thử JSON.opesify (obj, null, 4). Điều này sẽ viết nó ra dưới dạng văn bản thụt lề gọn gàng
Ben Clayton

2
JSON.opesify chỉ có thể hiển thị một tập hợp con nhỏ của các giá trị javascript và sẽ đưa ra một ngoại lệ cho phần còn lại - console.log không có vấn đề này.
Hãy nhớ đến

11
Nếu bạn là người mới như tôi, đừng quên console.logtức làconsole.log(JSON.stringify(obj,null, 4));
nilesh

2
"Uncaught TypeError: Chuyển đổi cấu trúc vòng tròn thành JSON" khi ob = window.
Michael

1
Tôi đã có trường hợp nó không hoạt động: nó hiển thị {}cho một đối tượng không trống. Vì vậy, hãy chắc chắn kiểm tra console.log(obj)trước khi nghĩ rằng đối tượng của bạn trống khi strigify()trở về {}.
Sindarus

394
var output = '';
for (var property in object) {
  output += property + ': ' + object[property]+'; ';
}
alert(output);

1
Đây là những gì chính xác tôi muốn. Tôi đang sử dụng google maps v3 và directionrenderer trả về một đối tượng. Điều đó có bốn mục và trong đó một tên đối tượng tiếp tục thay đổi, vì vậy chúng ta cần tìm thấy điều đó. Cho rằng phương pháp này thực sự có ích. Bên cạnh đó, chúng ta có thể nhận được tất cả tên của các thuộc tính và đối tượng. Hoặc có cách nào khác để tìm tên của các đối tượng và thuộc tính không?
Jayapal Chandran

34
+1, không phải tất cả javascript đều được chạy trong trình duyệt hoặc có thể được gỡ lỗi trong chúng.
Bill Yang

3
Bạn có thể muốn che giấu việc xây dựng trong cruft với hasOwnProperty hầu hết thời gian.
John

9
Ôi - 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7 :; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14:];
JSideris

1
Một chút muộn để tìm thấy điều này, nhưng như nó đã được yêu cầu vào ngày sinh nhật của tôi năm ngoái (tháng 29), đây là một bí quyết làm việc. jsfiddle.net/MrMarlow/fq53o6o9
MrMarlow

124

console.dir(object):

Hiển thị danh sách tương tác các thuộc tính của một đối tượng JavaScript được chỉ định. Danh sách này cho phép bạn sử dụng các hình tam giác tiết lộ để kiểm tra nội dung của các đối tượng con.

Lưu ý rằng console.dir()tính năng này là không chuẩn. Xem tài liệu web MDN


1
Có, đây là một giải pháp tốt, tuy nhiên nó chỉ hoạt động như được bỏ qua nếu bạn muốn chỉ đăng nhập đối tượng (ví dụ: console.dir (obj)). Trong trường hợp bạn muốn nối một sting với đầu ra, nó sẽ cung cấp cho bạn [Object Object].
Zoman

Một lợi thế lớn console.dirlà bạn vẫn có thể mở rộng và đọc các giá trị trong bảng điều khiển của mình sau khi biến đã được thu gom rác. Điều này được mô tả trong một bài viết SO
Dawson B

Và một lợi thế nữa console.dirlà khi bạn lưu bàn điều khiển vào tệp, tất cả các thuộc tính đều nằm trong tệp như mong đợi. Điều đó không xảy ra khi chỉ sử dụng console.log.
Kepi

79

thử cái này :

console.log(JSON.stringify(obj))

Điều này sẽ in phiên bản chuỗi của đối tượng. Vì vậy, thay vì [object]là một đầu ra, bạn sẽ nhận được nội dung của đối tượng.


7
typeerror: Converting circular structure to JSON?
Hoàng tử Kaiden

@KaidenPrince xem câu trả lời này cho lỗi của bạn: stackoverflow.com/questions/4816099/NH Có thể là một thành phần DOM trong đối tượng của bạn. Nếu đó là trường hợp, tốt nhất bạn nên cố gắng đăng nhập vào bảng điều khiển trong chrome hoặc firefox và kiểm tra ở đó. Nếu không, bạn phải loại bỏ tất cả các phần tử tròn trước khi JSON.opesify được gọi để nó hoạt động.
Ace Hyzer

Giải pháp đơn giản là chia thành 2 lệnh riêng biệt có tin hay không: console.log ("id:"); console.log (obj);
Collin Chaffin

66

Chà, Firefox (nhờ @Bojangles cung cấp thông tin chi tiết) có Object.toSource()phương thức in các đối tượng dưới dạng JSON và function(){}.

Đó là đủ cho hầu hết các mục đích gỡ lỗi, tôi đoán.


6
Object.toSource () dường như không hoạt động cho Chrome, điều này có được mong đợi không? Hay Chrome không thuộc "trình duyệt nâng cao"? =)
kiểu

44
Chủ đề cũ, chỉ tìm thấy nó thông qua Google. .toSource()thực ra chỉ có Firefox . Chỉ cần nghĩ rằng tôi sẽ cho bạn biết.
Bojangles

52

Nếu bạn muốn sử dụng cảnh báo, để in đối tượng của mình, bạn có thể làm điều này:

alert("myObject is " + myObject.toSource());

Nó nên in từng thuộc tính và giá trị tương ứng của nó ở định dạng chuỗi.


18
toSource () không hoạt động trong các trình duyệt không tắc kè (ví dụ: Chrome, Safari)
Yarin

37

Nếu bạn muốn xem dữ liệu ở định dạng bảng, bạn có thể sử dụng

console.table(obj);

Bảng có thể được sắp xếp nếu bạn bấm vào cột bảng.

Bạn cũng có thể chọn các cột để hiển thị:

console.table(obj, ['firstName', 'lastName']);

Bạn có thể tìm thêm thông tin về console.table tại đây


34

Trong NodeJS bạn có thể in một đối tượng bằng cách sử dụng util.inspect(obj). Hãy chắc chắn để nói rõ độ sâu hoặc bạn sẽ chỉ có một bản in nông của đối tượng.


33

Chức năng:

var print = function(o){
    var str='';

    for(var p in o){
        if(typeof o[p] == 'string'){
            str+= p + ': ' + o[p]+'; </br>';
        }else{
            str+= p + ': { </br>' + print(o[p]) + '}';
        }
    }

    return str;
}

Sử dụng:

var myObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

$('body').append( print(myObject) );

Thí dụ:

http://jsfiddle.net/WilsonPage / 6eqMn /


Phương pháp in gọi trình duyệt để in trang sang pdf: p
Marwen Trabelsi

@jsh bạn nên xoay if-other xung quanh và kiểm tra đối tượng thay vì chỉ chuỗi. cập nhật fiddle: jsfiddle.net/6eqMn/594
Michael Walter

1
@wilsonpage Điều này không thành công nếu tôi thêm giá trị số nguyên vào thuộc tính tel :(
ni3

26

Đơn giản chỉ cần sử dụng

JSON.stringify(obj)

Thí dụ

var args_string = JSON.stringify(obj);
console.log(args_string);

Hoặc là

alert(args_string);

Ngoài ra, lưu ý trong các chức năng javascript được coi là đối tượng.

Như một lưu ý thêm:

Trên thực tế, bạn có thể gán thuộc tính mới như thế này và truy cập vào console.log hoặc hiển thị nó trong cảnh báo

foo.moo = "stackoverflow";
console.log(foo.moo);
alert(foo.moo);

1
Câu hỏi tự đặt ra: "Giống như khi chúng ta 'cảnh báo' một biến", vì vậy đó không thực sự là một câu trả lời. Và cũng là tùy chọn khác của bạn "JSON.opesify (obj)" đã được đề cập trong "27 tháng 11 năm 2010", bạn chỉ làm lộn xộn câu hỏi này với các câu hỏi trùng lặp và không trả lời. Quan điểm của bạn về việc gán các thuộc tính mới cũng vô nghĩa trong bối cảnh này.
Paul


18

Như đã nói trước đây cách tốt nhất và đơn giản nhất tôi tìm thấy là

var getPrintObject=function(object)
{
    return JSON.stringify(object);
}

Đây là giải pháp dễ nhất và nhanh nhất, tuy nhiên nó không hoạt động trên các đối tượng lớn như navigator.
someguy234


16

NB: Trong các ví dụ này, yourObj xác định đối tượng bạn muốn kiểm tra.

Trước hết, cách ưa thích nhất nhưng được sử dụng nhiều nhất của tôi để hiển thị một đối tượng:

Đây là cách hiển thị chính xác nội dung của một đối tượng

console.log(yourObj)

sẽ tạo ra một cái gì đó như: nhập mô tả hình ảnh ở đây

Tôi nghĩ giải pháp tốt nhất là xem qua các Khóa đối tượng và sau đó qua Giá trị đối tượng nếu bạn thực sự muốn xem đối tượng giữ gì ...

console.log(Object.keys(yourObj));
console.log(Object.values(yourObj));

Nó sẽ xuất ra một cái gì đó như: nhập mô tả hình ảnh ở đây (hình trên: các khóa / giá trị được lưu trữ trong đối tượng)

Ngoài ra còn có tùy chọn mới này nếu bạn đang sử dụng ECMAScript 2016 hoặc mới hơn:

Object.keys(yourObj).forEach(e => console.log(`key=${e}  value=${yourObj[e]}`));

Điều này sẽ tạo ra đầu ra gọn gàng: nhập mô tả hình ảnh ở đây Giải pháp được đề cập trong câu trả lời trước: console.log(yourObj)hiển thị quá nhiều tham số và không phải là cách thân thiện nhất để hiển thị dữ liệu bạn muốn . Đó là lý do tại sao tôi khuyên bạn nên đăng nhập khóa và sau đó giá trị riêng.

Tiếp theo:

console.table(yourObj)

Một người nào đó trong một bình luận trước đó đã đề xuất cái này, tuy nhiên nó không bao giờ có tác dụng với tôi. Nếu nó hoạt động cho người khác trên một trình duyệt khác hoặc một cái gì đó, thì kudos! Ill vẫn đặt mã ở đây để tham khảo! Sẽ xuất một cái gì đó như thế này đến bàn điều khiển: nhập mô tả hình ảnh ở đây


Bạn có thể mở rộng ví dụ để bao gồm Object và obj.
lịch sử

không chắc tôi hiểu nhận xét, nhưng tôi đã thêm các tên khác nhau cho các đối tượng nên có tên. đối tượng không đủ rõ ràng.
Max Alexander Hanna

console.table(yourObj) đã làm việc cho tôi trên Google Chrome Phiên bản 77.0.3865.90 (Bản dựng chính thức) (64-bit). Cám ơn vì đã chia sẻ!
Devner

15

(Điều này đã được thêm vào thư viện của tôi tại GitHub )

Phát minh lại bánh xe ở đây! Không có giải pháp nào trong số này làm việc cho tình huống của tôi. Vì vậy, tôi nhanh chóng ghi lại câu trả lời của wilsonpage . Cái này không phải để in ra màn hình (thông qua bảng điều khiển, hoặc trường văn bản hoặc bất cứ thứ gì). Nó hoạt động tốt trong những tình huống đó và hoạt động tốt như OP yêu cầu alert. Nhiều câu trả lời ở đây không giải quyết bằng cách sử dụng alertnhư OP yêu cầu. Dù sao đi nữa, tuy nhiên, nó được định dạng để truyền dữ liệu. Phiên bản này dường như trả về một kết quả rất giống như toSource(). Tôi đã không được thử nghiệm JSON.stringify, nhưng tôi cho rằng đây là điều tương tự. Phiên bản này giống như một poly-fil hơn để bạn có thể sử dụng nó trong bất kỳ môi trường nào. Kết quả của chức năng này là một khai báo đối tượng Javascript hợp lệ.

Tôi sẽ không nghi ngờ nếu một cái gì đó như thế này đã có trên SO ở đâu đó, nhưng nó chỉ ngắn hơn để làm nó hơn là dành một lúc để tìm kiếm câu trả lời trong quá khứ. Và vì câu hỏi này là câu hỏi hàng đầu của tôi trên google khi tôi bắt đầu tìm kiếm về điều này; Tôi nghĩ rằng đặt nó ở đây có thể giúp đỡ người khác.

Dù sao đi nữa, kết quả từ hàm này sẽ là một chuỗi đại diện cho đối tượng của bạn, ngay cả khi đối tượng của bạn có các đối tượng và mảng nhúng, và ngay cả khi các đối tượng hoặc mảng đó có thêm các đối tượng và mảng được nhúng. (Tôi nghe nói bạn thích uống? Vì vậy, tôi đã làm lạnh chiếc xe của bạn bằng một chiếc máy làm mát. Và sau đó, tôi đã làm lạnh chiếc máy làm mát của bạn bằng máy làm mát. Vì vậy, máy làm mát của bạn có thể uống, trong khi bạn mát mẻ.)

Mảng được lưu trữ []thay vì {}và do đó không có cặp khóa / giá trị, chỉ có giá trị. Giống như các mảng thông thường. Do đó, chúng được tạo như mảng làm.

Ngoài ra, tất cả các chuỗi (bao gồm cả tên khóa) được trích dẫn, điều này là không cần thiết trừ khi các chuỗi đó có các ký tự đặc biệt (như dấu cách hoặc dấu gạch chéo). Nhưng, tôi không cảm thấy như phát hiện ra điều này chỉ để xóa một số trích dẫn mà nếu không vẫn hoạt động tốt.

Chuỗi kết quả này sau đó có thể được sử dụng với evalhoặc chỉ đưa nó vào một thao tác chuỗi var thru. Do đó, tạo lại đối tượng của bạn một lần nữa, từ văn bản.

function ObjToSource(o){
    if (!o) return 'null';
    var k="",na=typeof(o.length)=="undefined"?1:0,str="";
    for(var p in o){
        if (na) k = "'"+p+ "':";
        if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
        else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
        else str += k + o[p] + ",";
    }
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

Hãy cho tôi biết nếu tôi làm hỏng tất cả, hoạt động tốt trong thử nghiệm của tôi. Ngoài ra, cách duy nhất tôi có thể nghĩ ra để phát hiện loại arraylà kiểm tra sự hiện diện của length. Bởi vì Javascript thực sự lưu trữ các mảng dưới dạng đối tượng, tôi thực sự không thể kiểm tra loại array(không có loại nào như vậy!). Nếu bất cứ ai khác biết một cách tốt hơn, tôi rất thích nghe nó. Bởi vì, nếu đối tượng của bạn cũng có một thuộc tính được đặt tên lengththì hàm này sẽ coi nhầm nó là một mảng.

EDIT: Đã thêm kiểm tra cho các đối tượng có giá trị null. Cảm ơn Brock Adams

EDIT: Dưới đây là chức năng cố định để có thể in các đối tượng đệ quy vô hạn. Điều này không in giống như toSourcetừ FF vì toSourcesẽ in đệ quy vô hạn một lần, trong đó, chức năng này sẽ giết nó ngay lập tức. Hàm này chạy chậm hơn hàm trên, vì vậy tôi sẽ thêm nó vào đây thay vì chỉnh sửa hàm trên, vì nó chỉ cần thiết nếu bạn định chuyển các đối tượng liên kết lại với chính chúng, ở đâu đó.

const ObjToSource=(o)=> {
    if (!o) return null;
    let str="",na=0,k,p;
    if (typeof(o) == "object") {
        if (!ObjToSource.check) ObjToSource.check = new Array();
        for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
        ObjToSource.check.push(o);
    }
    k="",na=typeof(o.length)=="undefined"?1:0;
    for(p in o){
        if (na) k = "'"+p+"':";
        if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
        else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
        else str += k+o[p]+",";
    }
    if (typeof(o) == "object") ObjToSource.check.pop();
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

Kiểm tra:

var test1 = new Object();
test1.foo = 1;
test1.bar = 2;

var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;

console.log(ObjToSource(testobject));
console.log(testobject.toSource());

Kết quả:

{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})

LƯU Ý: Cố gắng in document.bodylà một ví dụ khủng khiếp. Đối với một, FF chỉ in một chuỗi đối tượng trống khi sử dụng toSource. Và khi sử dụng chức năng trên, FF gặp sự cố SecurityError: The operation is insecure.. Và Chrome sẽ sụp đổ Uncaught RangeError: Maximum call stack size exceeded. Rõ ràng, document.bodykhông có nghĩa là được chuyển đổi thành chuỗi. Bởi vì nó quá lớn hoặc chống lại chính sách bảo mật để truy cập vào một số thuộc tính nhất định. Trừ khi, tôi đã làm hỏng một cái gì đó ở đây, hãy nói!


Dễ bị tai nạn. Hãy thử ObjToSource(document.body), ví dụ.
Brock Adams

ok, tôi tìm thấy vấn đề Tôi đã không kiểm tra các đối tượng có giá trị null. Đó là cố định bây giờ. Nhưng, bạn vẫn không thể làm ObjToSource(document.body)vì đệ quy vô hạn. Ngay cả document.body.toSource()trong FireFox cũng trả về một đối tượng trống.
Pimp Trizkit

@BrockAdams - Hiện tại nó đã được sửa cho đệ quy vô hạn, tuy nhiên document.bodyvẫn không thể in được. Xem chú thích.
Pimp Trizkit

document.bodychỉ là một lối tắt để chỉ ra một số vấn đề lớn. Bây giờ bạn đã sửa lỗi tồi tệ nhất trong số đó và tôi đã nâng cấp. (Mặc dù, tôi tin rằng một cách tiếp cận khác có thể xử lý document.body. Hầu hết các câu trả lời ở đây cũng không làm tốt với nó.)
Brock Adams

Chà, nếu bạn (hoặc bất kỳ ai khác) có bất kỳ ý tưởng nào về cách vượt qua thực tế rằng một vật thể lớn như vậy sẽ lấp đầy ngăn xếp trong quá trình đệ quy hoặc bỏ qua các hạn chế bảo mật. Tôi rất thích nghe nó. Cảm ơn đã bình chọn!
Pimp Trizkit

14

Nếu bạn muốn in đối tượng có độ dài đầy đủ, có thể sử dụng

console.log (yêu cầu ('produc'). tests (obj, {showHidden: false, height: null})

Nếu bạn muốn in đối tượng bằng cách chuyển đổi nó thành chuỗi thì

console.log (JSON.opesify (obj));


bạn sẽ cần thêm JSON.stringifykhi bạn cố gắng nối với một đối tượng chuỗi. Nếu bạn sử dụng console.log(object), nó sẽ in đẹp nội dung của đối tượng
Satadru Biswas

12

Đây là một cách để làm điều đó:

console.log("%o", obj);

Hấp dẫn. Có thêm thông tin về điều này?
Luke

Trong ngữ cảnh của Chrome-dev-tool, google đã đề cập đến điều này trong liên kết này . đề cập đến phần "Thay thế và định dạng chuỗi"
chaco

Tôi đã nhìn thấy nó trong tài liệu mdn .
Anton Harnia Khẩu

2
Vì vậy, câu trả lời bị đánh giá thấp, đây chính xác là những gì tôi đang tìm kiếm.
Shubham Kushwah

11

Tôi cần một cách để in đệ quy đối tượng, câu trả lời của pagewil được cung cấp (Cảm ơn!). Tôi đã cập nhật nó một chút để bao gồm một cách để in lên một mức nhất định và thêm khoảng cách để nó được thụt lề đúng dựa trên cấp độ hiện tại mà chúng ta đang ở để dễ đọc hơn.

// Recursive print of object
var print = function( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '<pre>';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += '    ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '...</br>';
        return str;
    }

    for ( var p in o ) {
        if ( typeof o[p] == 'string' ) {
            str += levelStr +
                p + ': ' + o[p] + ' </br>';
        } else {
            str += levelStr +
                p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 ) {
        str += '</pre>';
    }
    return str;
};

Sử dụng:

var pagewilsObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

// Recursive of whole object
$('body').append( print(pagewilsObject) ); 

// Recursive of myObject up to 1 level, will only show name 
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) ); 

Nhu cầu công việc. Có dấu phẩy, dấu ngoặc kép, v.v.
posfan12

6

Tôi luôn luôn sử dụng console.log("object will be: ", obj, obj1). bằng cách này, tôi không cần phải giải quyết vấn đề với chuỗi hóa bằng JSON. Tất cả các thuộc tính của đối tượng sẽ được mở rộng độc đáo.


6

Một cách khác để hiển thị các đối tượng trong giao diện điều khiển là với JSON.stringify. Kiểm tra ví dụ dưới đây:

var gandalf = {
  "real name": "Gandalf",
  "age (est)": 11000,
  "race": "Maia",
  "haveRetirementPlan": true,
  "aliases": [
    "Greyhame",
    "Stormcrow",
    "Mithrandir",
    "Gandalf the Grey",
    "Gandalf the White"
  ]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));

5

Chức năng Javascript

<script type="text/javascript">
    function print_r(theObj){ 
       if(theObj.constructor == Array || theObj.constructor == Object){ 
          document.write("<ul>") 
          for(var p in theObj){ 
             if(theObj[p].constructor == Array || theObj[p].constructor == Object){ 
                document.write("<li>["+p+"] => "+typeof(theObj)+"</li>"); 
                document.write("<ul>") 
                print_r(theObj[p]); 
                document.write("</ul>") 
             } else { 
                document.write("<li>["+p+"] => "+theObj[p]+"</li>"); 
             } 
          } 
          document.write("</ul>") 
       } 
    } 
</script>

Đối tượng in

<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script> 

thông qua print_r trong Javascript


Tôi không chắc đây có phải là lỗi trong ví dụ js.do tôi đang sử dụng hay không, nhưng điều này dường như chỉ xuất ra "nhánh" đầy đủ đầu tiên của cây. tức là nó tuân theo tham chiếu đầu tiên của tài liệu tham khảo đầu tiên ... ad infinitum
Câu chuyện Jon

5
var list = function(object) {
   for(var key in object) {
     console.log(key);
   }
}

objectđối tượng của bạn ở đâu

hoặc bạn có thể sử dụng công cụ này trong các công cụ phát triển chrome, tab "console":

console.log(object);


Tôi nghĩ rằng câu trả lời của bạn là không đầy đủ. (không phải tôi gây ra downvote) Điều này, tuy nhiên, chỉ in khóa ..
Abdillah

1
cảm ơn câu trả lời của bạn, nó đã truyền cảm hứng cho tôi để làm điều này: console.log(Object.keys(object));trong khi tôi biết rằng chỉ in các khóa thuộc tính, nó là đủ cho tôi cho mục đích của tôi;)
Wilson

5

Giả sử đối tượng obj = {0:'John', 1:'Foo', 2:'Bar'}

In nội dung của đối tượng

for (var i in obj){
    console.log(obj[i], i);
}

Đầu ra bảng điều khiển (Chrome DevTools):

John 0
Foo 1
Bar 2

Mong rằng sẽ giúp!


4

Tôi thích sử dụng console.tableđể có được định dạng đối tượng rõ ràng, vì vậy hãy tưởng tượng bạn có đối tượng này:

const obj = {name: 'Alireza', family: 'Dezfoolian', gender: 'male', netWorth: "$0"};

Và bạn sẽ thấy một bảng gọn gàng và dễ đọc như thế này dưới đây: console.table


3

Một chức năng trợ giúp nhỏ tôi luôn sử dụng trong các dự án của mình để gỡ lỗi đơn giản, nhanh chóng thông qua bảng điều khiển. Cảm hứng lấy từ Laravel.

/**
 * @param variable mixed  The var to log to the console
 * @param varName string  Optional, will appear as a label before the var
 */
function dd(variable, varName) {
    var varNameOutput;

    varName = varName || '';
    varNameOutput = varName ? varName + ':' : '';

    console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}

Sử dụng

dd(123.55); đầu ra:
nhập mô tả hình ảnh ở đây

var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj'); 

nhập mô tả hình ảnh ở đây


3

Bạn cũng có thể sử dụng khái niệm bằng chữ mẫu ES6 để hiển thị nội dung của đối tượng JavaScript theo định dạng chuỗi.

alert(`${JSON.stringify(obj)}`);

const obj  = {
  "name" : "John Doe",
  "habbits": "Nothing",
};
alert(`${JSON.stringify(obj)}`);


2

tôi đã sử dụng phương pháp in của pagewil và nó hoạt động rất độc đáo.

đây là phiên bản hơi mở rộng của tôi với các vết lõm (cẩu thả) và các dấu phân cách prop / ob riêng biệt:

var print = function(obj, delp, delo, ind){
    delp = delp!=null ? delp : "\t"; // property delimeter
    delo = delo!=null ? delo : "\n"; // object delimeter
    ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
    var str='';

    for(var prop in obj){
        if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
          var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
          str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
        }else{
          str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
        }
    }
    return str;
};

Nó rất cẩu thả.
posfan12

2

Một sửa đổi khác của mã pagewils ... anh ta không in ra bất cứ thứ gì ngoài chuỗi và để trống các số và trường boolean và tôi đã sửa lỗi đánh máy trên kiểu thứ hai ngay bên trong hàm như được tạo bởi megaboss.

var print = function( o, maxLevel, level )
{
    if ( typeof level == "undefined" )
    {
        level = 0;
    }
    if ( typeof maxlevel == "undefined" )
    {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 )
    {
        str = '<pre>';   // can also be <pre>
    }

    var levelStr = '<br>';
    for ( var x = 0; x < level; x++ )
    {
        levelStr += '    ';   // all those spaces only work with <pre>
    }

    if ( maxLevel != 0 && level >= maxLevel )
    {
        str += levelStr + '...<br>';
        return str;
    }

    for ( var p in o )
    {
        switch(typeof o[p])
        {
          case 'string':
          case 'number':    // .tostring() gets automatically applied
          case 'boolean':   // ditto
            str += levelStr + p + ': ' + o[p] + ' <br>';
            break;

          case 'object':    // this is where we become recursive
          default:
            str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
            break;
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 )
    {
        str += '</pre>';   // also can be </pre>
    }
    return str;
};

2

Đây là chức năng.

function printObj(obj) {
console.log((function traverse(tab, obj) {
    let str = "";
    if(typeof obj !== 'object') {
        return obj + ',';
    }
    if(Array.isArray(obj)) {            
        return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
    }
    str = str + '{\n';
    for(var p in obj) {
        str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'\n';
    }
    str = str.slice(0,-2) + str.slice(-1);                
    str = str + tab + '},';
    return str;
}('',obj).slice(0,-1)))};

Nó có thể hiển thị đối tượng bằng cách sử dụng tab thụt lề với khả năng đọc.


Cú sút chắc chắn làm sập trình duyệt của bạn: P
Satadru Biswas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.