Object Dump JavaScript


91

มีโปรแกรมเสริม / แอปพลิเคชันของบุคคลที่สามหรือวิธีใดในการดำเนินการถ่ายโอนข้อมูลแผนที่วัตถุในโปรแกรมแก้ไขข้อบกพร่องสคริปต์สำหรับวัตถุ JavaScript

นี่คือสถานการณ์ ... ฉันมีวิธีการเรียกสองครั้งและในแต่ละครั้งมีบางอย่างที่แตกต่างกัน ฉันไม่แน่ใจว่าอะไรที่แตกต่างกัน แต่มีบางอย่างอยู่ ดังนั้นถ้าฉันสามารถถ่ายโอนคุณสมบัติทั้งหมดของ window (หรืออย่างน้อย window.document) ลงในโปรแกรมแก้ไขข้อความฉันสามารถเปรียบเทียบสถานะระหว่างการเรียกทั้งสองกับไฟล์ต่างแบบธรรมดาได้ ความคิด?


คำตอบ:


61

Firebug +console.log(myObjectInstance)


4
... แล้วมองเข้าไปในคอนโซล Firebugและไม่ได้มาตรฐานจาวาสคริคอนโซล :-)
towi

4
IE มีคอนโซล [object Object]แต่การเข้าสู่ระบบผลตอบแทนวัตถุ ไม่ค่อยมีประโยชน์
Steve Robbins

6
@SteveRobbins ใครใช้ IE ในการพัฒนาเว็บแอปพลิเคชันในปัจจุบัน โดยส่วนตัวแล้วการใช้งานเพียงอย่างเดียวที่ฉันพบสำหรับ Internet Explorer คือการดาวน์โหลดเว็บเบราว์เซอร์จริงเมื่อฉันติดตั้งระบบปฏิบัติการ Windows ใหม่ นั่นเป็นครั้งเดียวที่ฉันเปิดตัวซอฟต์แวร์นี้
Darin Dimitrov

9
นักพัฒนาที่รองรับเบราว์เซอร์หลัก ๆ หากปัญหามีเฉพาะใน IE ก็สามารถทดสอบได้ใน IE เท่านั้นดังนั้นคุณต้องใช้เบราว์เซอร์
Steve Robbins

2
และถ้าคุณใช้ node.js และ terminal .. ไม่มี firebug ??
Cheruvim

138
console.log("my object: %o", myObj)

มิฉะนั้นคุณจะได้รับการแสดงสตริงในบางครั้ง:

[object Object]

หรือบางอย่าง


นี่ไม่ใช่คำตอบที่เลือกไว้บนโลกอย่างไร? โชคดีที่คำตอบนี้ในวันเกิดของฉันเมื่อ 4 ปีก่อนตอนที่ฉันไม่ได้ใช้ js
Joey Carson

2
ใน Meteor (ฝั่งเซิร์ฟเวอร์) จะพิมพ์my object: %oออกมา ไม่ค่อยมีประโยชน์ :)
Erdal G.

ใน Node.js สิ่งนี้จะพิมพ์เพียงแค่"%o"เอาต์พุตตามตัวอักษร เพียงแค่แยกสตริงออกจากอ็อบเจ็กต์อย่างไรก็ตามจะดัมพ์อ็อบเจ็กต์ที่มนุษย์อ่านได้ตามต้องการ

ตลกดีว่าสิ่งนี้มีการพัฒนาอย่างไร ตอนนี้console.log("my", myObj)เพียงแค่แสร้งทำเป็นว่า%oมีอยู่ใน Chrome, Firefox, Opera, IE11, Edge
Bob Stein

45
function mydump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;

    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') {  
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { 
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += mydump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { 
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}

4
อัปเดตรหัสของคุณด้วยการเปลี่ยนชื่อฟังก์ชันเช่นเดียวกับในการเรียกซ้ำจะเรียกว่า "dump" ในขณะที่กำหนดเวลาเป็น "mydump"
Vikas


2
สิ่งนี้ฆ่า Chrome และ Firefox ด้วย "การเรียกซ้ำมากเกินไป" เมื่อใช้เพื่อตรวจสอบวัตถุ jquery
slashdottir

@slashdottir มันง่ายที่จะแก้ไขโดยการตรวจสอบif (level > 10) return level_padding + '<< too deep >>';
John Henckel

"การเรียกซ้ำมากเกินไป" เกิดขึ้นเนื่องจากการอ้างอิงแบบวงกลม (เมื่อพารามิเตอร์ลูกของออบเจ็กต์หนึ่งอ้างอิงออบเจ็กต์ระดับบนสุด) สามารถแก้ไขได้โดยการจดจำผู้ปกครองของค่าปัจจุบันทั้งหมดและหากค่าปัจจุบันตรงกับค่าใดค่าหนึ่งของผู้ปกครองให้หยุดขุดเพิ่มเติม
Alex Velickiy

42

หากคุณใช้ Chrome, Firefox หรือ IE10 + ทำไมไม่ขยายคอนโซลและใช้

(function() {
    console.dump = function(object) {
        if (window.JSON && window.JSON.stringify)
            console.log(JSON.stringify(object));
        else
            console.log(object);
    };
})();

สำหรับโซลูชันข้ามเบราว์เซอร์ที่กระชับ


ฉันชอบอันนี้ โดยเฉพาะอย่างยิ่งสำหรับเบราว์เซอร์ที่ไม่รองรับการทิ้งวัตถุ
Aley

และอาจแทนที่ว่า "else console.log (object);" ด้วยการเรียกใช้ฟังก์ชันการข้ามผ่านแบบกำหนดเองในstackoverflow.com/a/3011557/2236012ด้านบนหรือไม่ ... ;)
CB

@CB "การเรียกซ้ำมากเกินไป" และเบราว์เซอร์ที่ค้างคือสิ่งที่ทำให้ฉันได้รับใน Firefox และ Chrome
slashdottir

4
JSON.stringify ไม่สามารถจัดลำดับโครงสร้างแบบวัฏจักร มันจะไม่ทำงานสำหรับวัตถุทั้งหมด
Grzegorz Luczywo

25

เพียงใช้:

console.dir(object);

คุณจะได้รับการแสดงวัตถุที่คลิกได้ดี ทำงานใน Chrome และ Firefox


1
Chrome และ Firefox ให้ [object Object]
slashdottir

คุณสามารถทดสอบได้ใน Console (Hit F12) โดยconsole.dir({bar:"foo"}); วัตถุของคุณเขียนทับเมธอด toString หรือไม่
mons droid

ดูเหมือนว่าจะทำงานในคอนโซลเป็นอย่างน้อย อาจเป็นผู้ใช้โดยฉัน ขอบคุณ
slashdottir

คุณลักษณะที่น่ารักเช่นนี้
tomalone

คุณชายคือฮีโร่👍
j4hangir



4

การใช้console.log(object)จะโยนวัตถุของคุณไปที่คอนโซล Javascript แต่นั่นไม่ใช่สิ่งที่คุณต้องการเสมอไป การใช้JSON.stringify(object)จะส่งคืนข้อมูลส่วนใหญ่ที่จะเก็บไว้ในตัวแปรเช่นส่งไปยังอินพุต textarea และส่งเนื้อหากลับไปที่เซิร์ฟเวอร์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.