Bagaimana saya bisa menampilkan objek JavaScript?


1618

Bagaimana cara menampilkan konten objek JavaScript dalam format string seperti saat kami alertvariabel?

Cara diformat yang sama saya ingin menampilkan objek.


7
Bisakah Anda menulis ulang pertanyaan Anda? Apa yang Anda maksud dengan "cara diformat"? Seperti dalam, dengan pemformatan kaya, seperti tebal / miring / dll?
Sasha Chedygov

apakah ada cara untuk menampilkan nilai runtime suatu variabel dengan mencetak nilai variabel menggunakan beberapa perintah konsol?
BlackPanther

1
@ BlackPanther Lakukan saja console.log("", yourObject1, yourObject2, yourObject3, etc...);. Versi yang lebih pendek adalah dengan hanya melakukan console.log(yourObject1, yourObject2, etc...);.
tom_mai78101

2
Bisakah Anda memilih jawaban yang lebih baik yang lebih akurat mencerminkan konsensus komunitas?
HoldOffHunger

Seperti iniconsole.log('a string', aNumber, anObject)
onmyway133

Jawaban:


1069

Jika Anda ingin mencetak objek untuk keperluan debugging, gunakan kode:

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

akan ditampilkan:

tangkapan layar konsol chrome

Catatan: Anda hanya harus mencatat objek. Misalnya, ini tidak akan berfungsi:

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

Catatan ' : Anda juga dapat menggunakan koma dalam logmetode, maka baris pertama dari output akan menjadi string dan setelah itu objek akan di-render:

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

43
Fungsi itu juga berfungsi di Google Chrome ketika menggunakan JavaScript Console (Shift + Control + J atau Shift + Control + I, tergantung pada versi Chrome). Perhatikan juga bahwa ini console.log(obj1, obj2)bekerja dengan sangat baik, sehingga Anda tidak perlu memanggil console.log()setiap objek saat mencatat beberapa variabel. Selain itu, selalu ingat untuk menghapus semua panggilan dalam produksi, karena akan merusak browser yang tidak mengimplementasikannya (seperti Internet Explorer).
Felix

102
Ya itu mencetak [Objek objek] tetapi ia memiliki tombol ekspansi-toggly kecil di sampingnya yang memungkinkan Anda memeriksa isi objek.
Hughes

12
@hughes itu sebenarnya bisa melakukan keduanya. saya punya objek yang saya buat dengan: var obj = {"foo": false}; dan objek lain yang dilewatkan ke dalam callback dari server, yang melewati callback mencetak dengan panah kecil sehingga Anda dapat membukanya, yang dibuat secara statis hanya mencetak [objek objek] tanpa panah. Saya mencoba mencari tahu ini juga, ada pemikiran lain?
benstraw

124
console.log("id:"+obj);tidak akan keluaran benar seperti itu output string seperti yang Anda lihat di sana, Anda perlu menentukan seperti ini:console.log("id:"); console.log(obj);
Anriëtte Myburgh

14
Coba console.log(JSON.stringify(obj))atauconsole.dir(obj)
Robot Boy

2012

Gunakan JSON.stringifymetode asli . Bekerja dengan objek bersarang dan semua browser utama mendukung metode ini.

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()

Tautan ke Referensi API Mozilla dan contoh lainnya.

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

Gunakan custom JSON.stringify replacer jika Anda menemukan kesalahan Javascript ini

"Uncaught TypeError: Converting circular structure to JSON"

327
Untuk keluaran yang lebih mudah dibaca coba JSON.stringify (obj, null, 4). Ini akan menuliskannya sebagai teks dengan indentasi yang rapi
Ben Clayton

2
JSON.stringify hanya dapat menampilkan sebagian kecil nilai javascript, dan akan memberikan pengecualian untuk sisanya - console.log tidak memiliki masalah ini.
Ingat Monica

11
Jika Anda seorang pemula seperti saya, jangan lupa console.logyaituconsole.log(JSON.stringify(obj,null, 4));
nilesh

2
"Uncaught TypeError: Mengubah struktur melingkar ke JSON" ketika ob = window.
Michael

1
Saya punya kasus di mana itu tidak berfungsi: itu menunjukkan objek {}yang tidak kosong. Jadi pastikan untuk memeriksa console.log(obj)sebelum berpikir objek Anda kosong saat strigify()kembali {}.
Sindarus

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

1
Inilah yang sebenarnya saya inginkan. Saya menggunakan google maps v3 dan directionrenderer mengembalikan objek. Itu memiliki empat item dan dalam satu nama objek terus berubah sehingga kita perlu menemukannya. Untuk itu metode ini sangat membantu. Selain itu dengan cara ini kita bisa mendapatkan semua nama properti dan objek. Atau adakah cara lain untuk menemukan nama benda dan properti?
Jayapal Chandran

34
+1, tidak semua javascript dijalankan di browser atau dapat di-debug di dalamnya.
Bill Yang

3
Anda mungkin ingin menutupi built in cruft dengan hasOwnProperty sebagian besar waktu.
John

9
Omg - 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
Sedikit terlambat menemukan ini, tetapi karena diminta pada hari ulang tahunku tahun lalu (29 Agustus), di sini ada biola yang berfungsi. jsfiddle.net/MrMarlow/fq53o6o9
MrMarlow

124

console.dir(object):

Menampilkan daftar interaktif dari properti objek JavaScript yang ditentukan. Daftar ini memungkinkan Anda menggunakan segitiga pengungkapan untuk memeriksa konten objek anak.

Perhatikan bahwa console.dir()fitur ini tidak standar. Lihat Dokumen Web MDN


1
Ya ini adalah solusi yang baik, namun itu hanya berfungsi seperti yang diharapkan jika Anda hanya ingin mencatat objek (mis. Console.dir (obj)). Jika Anda ingin menyengat sengatan ke output, itu akan memberi Anda [Objek objek].
Zoman

Keuntungan besar console.diradalah bahwa Anda masih dapat memperluas dan membaca nilai-nilai di konsol Anda setelah variabel telah dikumpulkan. Ini dijelaskan dalam artikel SO
Dawson B

Dan satu keuntungan lagi console.diradalah ketika Anda menyimpan konsol ke file, semua properti ada di file seperti yang diharapkan. Itu tidak terjadi ketika menggunakan console.log saja.
Kepi

79

coba ini :

console.log(JSON.stringify(obj))

Ini akan mencetak versi objek yang dikencangkan. Jadi alih-alih [object]sebagai output Anda akan mendapatkan konten objek.


7
typeerror: Converting circular structure to JSON?
Pangeran Kaiden

@KaidenPrince melihat jawaban ini untuk kesalahan Anda: stackoverflow.com/questions/4816099/... Kemungkinan merupakan elemen DOM di objek Anda. Jika itu masalahnya, Anda sebaiknya mencoba masuk ke konsol dengan chrome atau firefox dan periksa di sana. Kalau tidak, Anda harus menghapus semua elemen melingkar sebelum JSON.stringify dipanggil agar berfungsi.
Ace Hyzer

Solusi adalah dengan hanya membagi menjadi 2 perintah terpisah percaya atau tidak: console.log ("id:"); console.log (obj);
Collin Chaffin

66

Yah, Firefox (terima kasih kepada @Bojangles untuk informasi terperinci) memiliki Object.toSource()metode yang mencetak objek seperti JSON dan function(){}.

Itu cukup untuk sebagian besar keperluan debugging, saya kira.


6
Object.toSource () tampaknya tidak berfungsi untuk Chrome, apakah ini yang diharapkan? Atau apakah Chrome tidak termasuk dalam "browser canggih"? =)
tstyle

44
Utas lama, baru ditemukan melalui Google. .toSource()sebenarnya hanya Firefox . Kupikir aku akan memberitahumu.
Bojangles

52

Jika Anda ingin menggunakan lansiran, untuk mencetak objek Anda, Anda dapat melakukan ini:

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

Ini harus mencetak setiap properti dan nilai yang sesuai dalam format string.


18
toSource () tidak berfungsi di browser non-tokek (mis. Chrome, Safari)
Yarin

37

Jika Anda ingin melihat data dalam format tabel yang dapat Anda gunakan

console.table(obj);

Tabel dapat diurutkan jika Anda mengklik kolom tabel.

Anda juga dapat memilih kolom apa yang akan ditampilkan:

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

Anda dapat menemukan informasi lebih lanjut tentang console.table di sini


34

Di NodeJS Anda dapat mencetak objek dengan menggunakan util.inspect(obj). Pastikan untuk menyatakan kedalamannya atau Anda hanya akan memiliki cetakan objek yang dangkal.


33

Fungsi:

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;
}

Pemakaian:

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

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

Contoh:

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


Metode cetak memanggil browser untuk mencetak halaman ke pdf: p
Marwen Trabelsi

@ jsh Anda harus memutar if-else dan memeriksa objek, bukan hanya string. updated fiddle: jsfiddle.net/6eqMn/594
Michael Walter

1
@wilsonpage Ini gagal jika saya menambahkan nilai integer ke properti tel :(
ni3

26

Cukup gunakan

JSON.stringify(obj)

Contoh

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

Atau

alert(args_string);

Juga, catatan dalam fungsi javascript dianggap sebagai objek.

Sebagai catatan tambahan:

Sebenarnya Anda dapat menetapkan properti baru seperti ini dan mengaksesnya console.log atau menampilkannya dalam peringatan

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

1
Pertanyaan itu sendiri menyatakan: "Seperti ketika kita 'mengingatkan' suatu variabel", jadi itu bukan jawaban. Dan juga pilihan Anda yang lain "JSON.stringify (obj)" telah disebutkan dalam "27 November 2010", Anda hanya mengacaukan pertanyaan ini dengan duplikat dan non-jawaban. Poin Anda tentang menetapkan properti baru juga tidak masuk akal dalam konteks ini.
Paul


18

Seperti yang dikatakan sebelumnya yang terbaik dan cara paling sederhana yang saya temukan adalah

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

Ini adalah solusi termudah dan tercepat, namun ini tidak berfungsi pada objek besar seperti navigator.
someguy234


16

NB: Dalam contoh-contoh ini, yourObj mendefinisikan objek yang ingin Anda periksa.

Pertama cara paling tidak favorit saya namun paling banyak digunakan untuk menampilkan objek:

Ini adalah cara defacto untuk menampilkan konten suatu objek

console.log(yourObj)

akan menghasilkan sesuatu seperti: masukkan deskripsi gambar di sini

Saya pikir solusi terbaik adalah dengan melihat melalui Objects Keys, dan kemudian melalui Nilai Objects jika Anda benar-benar ingin melihat apa yang dipegang objek ...

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

Ini akan menampilkan sesuatu seperti: masukkan deskripsi gambar di sini (gambar di atas: kunci / nilai yang disimpan dalam objek)

Ada juga opsi baru ini jika Anda menggunakan ECMAScript 2016 atau lebih baru:

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

Ini akan menghasilkan output yang rapi: masukkan deskripsi gambar di sini Solusi yang disebutkan dalam jawaban sebelumnya: console.log(yourObj)menampilkan terlalu banyak parameter dan bukan cara yang paling ramah pengguna untuk menampilkan data yang Anda inginkan . Itu sebabnya saya merekomendasikan kunci logging dan kemudian nilai secara terpisah.

Selanjutnya :

console.table(yourObj)

Seseorang dalam komentar sebelumnya menyarankan yang ini, namun itu tidak berhasil bagi saya. Jika itu berfungsi untuk orang lain di peramban lain atau sesuatu, maka kudos! Saya masih meletakkan kode di sini untuk referensi! Akan menampilkan sesuatu seperti ini ke konsol: masukkan deskripsi gambar di sini


Apakah Anda memperluas contoh untuk memasukkan Obyek dan objek.
historystamp

tidak yakin saya mengerti komentarnya, tetapi saya menambahkan nama yang berbeda untuk objek yang seharusnya memiliki nama. objek tidak cukup eksplisit.
Max Alexander Hanna

console.table(yourObj) bekerja untuk saya di Google Chrome Versi 77.0.3865.90 (Build Resmi) (64-bit). Terima kasih telah berbagi!
Devner

15

(Ini telah ditambahkan ke perpustakaan saya di GitHub )

Menemukan kembali roda di sini! Tak satu pun dari solusi ini bekerja untuk situasi saya. Jadi, saya cepat-cepat memperbaiki jawaban wilsonpage . Yang ini bukan untuk mencetak ke layar (melalui konsol, atau bidang teks atau apa pun). Ini berfungsi dengan baik dalam situasi itu dan berfungsi dengan baik seperti yang diminta OP alert. Banyak jawaban di sini tidak membahas menggunakan alertseperti yang diminta OP. Bagaimanapun, itu diformat untuk transportasi data. Versi ini tampaknya mengembalikan hasil yang sangat mirip toSource(). Saya belum diuji JSON.stringify, tetapi saya menganggap ini tentang hal yang sama. Versi ini lebih seperti poli-fil sehingga Anda dapat menggunakannya di lingkungan apa pun. Hasil dari fungsi ini adalah deklarasi objek Javascript yang valid.

Saya tidak akan ragu jika sesuatu seperti ini sudah ada di SO di suatu tempat, tapi itu lebih singkat untuk membuatnya daripada menghabiskan waktu mencari jawaban masa lalu. Dan karena pertanyaan ini adalah top hit saya di google ketika saya mulai mencari tentang ini; Saya pikir meletakkannya di sini mungkin bisa membantu orang lain.

Bagaimanapun, hasil dari fungsi ini akan menjadi representasi string dari objek Anda, bahkan jika objek Anda telah menyematkan objek dan array, dan bahkan jika objek atau array tersebut memiliki objek dan array yang tertanam lebih jauh. (Aku mendengarmu suka minum? Jadi, aku merapikan mobilmu dengan pendingin. Dan kemudian, aku merapikan pendinginmu dengan pendingin. Jadi, pendinginmu bisa minum, sementara kamu menjadi dingin.)

Array disimpan dengan []alih - alih {}dan karenanya tidak memiliki pasangan kunci / nilai, hanya nilai. Seperti array biasa. Oleh karena itu, mereka dibuat seperti array lakukan.

Juga, semua string (termasuk nama kunci) dikutip, ini tidak perlu kecuali string tersebut memiliki karakter khusus (seperti spasi atau garis miring). Tapi, saya tidak merasa ingin mendeteksi ini hanya untuk menghapus beberapa tanda kutip yang mungkin masih berfungsi dengan baik.

String yang dihasilkan ini kemudian dapat digunakan dengan evalatau hanya membuangnya ke var melalui manipulasi string. Dengan demikian, buat kembali objek Anda lagi, dari teks.

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)+"]";
}

Beri tahu saya jika saya mengacaukan semuanya, berfungsi dengan baik dalam pengujian saya. Juga, satu-satunya cara saya bisa memikirkan untuk mendeteksi tipe arrayadalah untuk memeriksa keberadaan length. Karena Javascript benar-benar menyimpan array sebagai objek, saya tidak dapat benar-benar memeriksa tipe array(tidak ada tipe seperti itu!). Jika ada orang lain yang tahu cara yang lebih baik, saya akan senang mendengarnya. Karena, jika objek Anda juga memiliki properti bernama lengthmaka fungsi ini keliru akan memperlakukannya sebagai array.

EDIT: Menambahkan cek untuk objek bernilai nol. Terima kasih Brock Adams

EDIT: Di bawah ini adalah fungsi tetap untuk dapat mencetak objek rekursif tanpa batas. Ini tidak mencetak sama seperti toSourcedari FF karena toSourceakan mencetak rekursi tak terbatas satu kali, sedangkan, fungsi ini akan membunuhnya segera. Fungsi ini berjalan lebih lambat daripada yang di atas, jadi saya menambahkannya di sini alih-alih mengedit fungsi di atas, karena hanya diperlukan jika Anda berencana untuk meneruskan objek yang menghubungkan kembali ke diri mereka sendiri, di suatu tempat.

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)+"]";
}

Uji:

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());

Hasil:

{'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}})

CATATAN: Mencoba mencetak document.bodyadalah contoh yang mengerikan. Untuk satu, FF hanya mencetak string objek kosong saat menggunakan toSource. Dan ketika menggunakan fungsi di atas, FF crash SecurityError: The operation is insecure.. Dan Chrome akan mogok Uncaught RangeError: Maximum call stack size exceeded. Jelas, document.bodyitu tidak dimaksudkan untuk dikonversi menjadi string. Karena terlalu besar, atau menentang kebijakan keamanan untuk mengakses properti tertentu. Kecuali, saya mengacaukan sesuatu di sini, katakan!


Rawan kecelakaan. Coba ObjToSource(document.body)misalnya.
Brock Adams

ok, saya menemukan masalahnya. Saya tidak memeriksa benda bernilai nol. Itu sudah diperbaiki sekarang. Tetapi, Anda masih tidak dapat melakukannya ObjToSource(document.body)karena rekursi yang tak terbatas. Bahkan document.body.toSource()di FireFox mengembalikan objek kosong.
Pimp Trizkit

@ RockAdams - Sekarang sudah diperbaiki untuk rekursi tak terbatas, namun document.bodymasih belum dapat dicetak. Lihat Catatan.
Pimp Trizkit

document.bodyhanyalah jalan pintas untuk menunjukkan beberapa masalah besar. Anda sekarang telah memperbaiki yang terburuk dari itu dan saya sudah terbalik. (Meskipun, saya percaya bahwa pendekatan yang berbeda dapat menangani document.body. Sebagian besar jawaban di sini juga tidak akan menentangnya.)
Brock Adams

Nah, jika Anda (atau orang lain) punya ide bagaimana melewati fakta bahwa objek sebesar itu akan mengisi tumpukan selama rekursi atau melewati pembatasan keamanan. Saya ingin sekali mendengarnya. Terima kasih untuk suaranya!
Pimp Trizkit

14

Jika Anda ingin mencetak objek yang panjangnya penuh, bisa digunakan

console.log (membutuhkan ('util'). inspect (obj, {showHidden: false, depth: null})

Jika Anda ingin mencetak objek dengan mengubahnya ke string lalu

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


Anda perlu menambahkan JSON.stringifyketika Anda mencoba menyatukan dengan objek string. Jika Anda menggunakan console.log(object), itu harus cukup mencetak isi objek
Satadru Biswas

12

Inilah cara untuk melakukannya:

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

Menarik. Apakah ada informasi lebih lanjut tentang ini?
Luke

Dalam konteks Chrome-dev-tool, google memang menyebutkan ini di tautan ini . merujuk pada bagian "Substitusi dan pemformatan string"
chaco

Saya melihatnya di mdn docs .
Anton Harniakou

2
Jadi jawaban yang diremehkan, inilah tepatnya yang saya cari.
Shubham Kushwah

11

Saya membutuhkan cara untuk mencetak objek secara rekursif, yang diberikan jawaban pagewil (Terima kasih!). Saya memperbaruinya sedikit untuk memasukkan cara untuk mencetak hingga tingkat tertentu, dan untuk menambahkan spasi sehingga benar-benar indentasi berdasarkan tingkat saat ini kita berada sehingga lebih mudah dibaca.

// 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;
};

Pemakaian:

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) ); 

Perlu bekerja. Ada koma yang hilang, kutipan, dll.
posfan12

6

Saya selalu menggunakan console.log("object will be: ", obj, obj1). dengan cara ini saya tidak perlu melakukan solusi dengan menggunakan JSON. Semua properti objek akan diperluas dengan baik.


6

Cara lain untuk menampilkan objek dalam konsol adalah dengan JSON.stringify. Lihat contoh di bawah ini:

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

Fungsi 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>

Objek pencetakan

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

via print_r dalam Javascript


Saya tidak yakin apakah ini bug dalam contoh js.do yang saya gunakan, tetapi ini sepertinya hanya menghasilkan "cabang" penuh pertama dari pohon. yaitu mengikuti referensi pertama dari referensi pertama ... ad infinitum
Jon Story

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

dimana objectobjekmu

atau Anda dapat menggunakan ini di alat dev chrome, tab "konsol":

console.log(object);


Saya pikir jawaban Anda tidak lengkap. (bukan saya yang menyebabkan downvote) Namun, ini hanya mencetak kunci ..
Abdillah

1
terima kasih atas jawaban Anda, itu telah mengilhami saya untuk melakukan ini: console.log(Object.keys(object));sementara saya tahu bahwa hanya mencetak kunci properti, itu cukup bagi saya untuk keperluan saya;)
Wilson

5

Asumsikan objek obj = {0:'John', 1:'Foo', 2:'Bar'}

Cetak konten objek

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

Output konsol (Chrome DevTools):

John 0
Foo 1
Bar 2

Semoga itu bisa membantu!


4

Saya lebih suka menggunakan console.tableuntuk mendapatkan format objek yang jelas, jadi bayangkan Anda memiliki objek ini:

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

Dan Anda akan melihat tabel yang rapi dan mudah dibaca seperti di bawah ini: meja konsol


3

Fungsi pembantu kecil yang selalu saya gunakan dalam proyek saya untuk debugging sederhana dan cepat melalui konsol. Inspirasi diambil dari 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) + ')');
}

Pemakaian

dd(123.55); output:
masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini


3

Anda juga dapat menggunakan konsep literal template ES6 untuk menampilkan konten objek JavaScript dalam format string.

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

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


2

saya menggunakan metode cetak pagewil, dan itu bekerja dengan sangat baik.

di sini adalah versi saya yang sedikit diperpanjang dengan indentasi (ceroboh) dan pembatas prop / ob yang berbeda:

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;
};

Sangat ceroboh.
posfan12

2

Modifikasi lain dari kode pagewils ... nya tidak mencetak apa pun selain string dan meninggalkan angka dan bidang boolean kosong dan saya memperbaiki kesalahan ketik pada typeof kedua tepat di dalam fungsi yang dibuat oleh 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

Inilah fungsinya.

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)))};

Itu dapat menampilkan objek menggunakan indentasi tab dengan keterbacaan.


Yakin ditembak untuk merusak browser Anda: P
Satadru Biswas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.