JavaScript đổ đối tượng


89

Có tiện ích bổ sung / ứng dụng của bên thứ 3 hoặc một số cách để thực hiện kết xuất bản đồ đối tượng trong trình gỡ lỗi tập lệnh cho một đối tượng JavaScript không?

Đây là tình huống ... Tôi có một phương thức được gọi hai lần, và trong mỗi lần có một cái gì đó khác nhau. Tôi không chắc điều gì khác biệt, nhưng có gì đó. Vì vậy, nếu tôi có thể kết xuất tất cả các thuộc tính của window (hoặc ít nhất là window.document) vào một trình soạn thảo văn bản, tôi có thể so sánh trạng thái giữa hai lệnh gọi với một tệp tin khác biệt đơn giản. Suy nghĩ?


Câu trả lời:


61

Firebug +console.log(myObjectInstance)


4
... và sau đó xem xét bảng điều khiển Firebug chứ không phải bảng điều khiển Javascript tiêu chuẩn . :-)
towi

3
IE có một bảng điều khiển, nhưng việc ghi nhật ký một đối tượng sẽ trả về [object Object]. Không hữu ích lắm
Steve Robbins

5
@SteveRobbins, ai sử dụng IE để phát triển các ứng dụng web ngày nay? Cá nhân tôi thấy cách sử dụng duy nhất cho đến nay đối với Internet Explorer là tải xuống trình duyệt web thực sau khi tôi cài đặt lại hệ điều hành Windows của mình. Nhân tiện, đó là lần duy nhất tôi khởi chạy phần mềm yên bình này.
Darin Dimitrov

8
Bất kỳ nhà phát triển nào hỗ trợ các trình duyệt chính. Nếu vấn đề chỉ tồn tại trong IE, nó chỉ có thể được kiểm tra trong IE, vì vậy bạn phải sử dụng trình duyệt.
Steve Robbins

2
Và nếu bạn đang sử dụng node.js và một thiết bị đầu cuối .. Không có firebug nào ??
Cheruvim

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

Nếu không, bạn sẽ kết thúc với một biểu diễn chuỗi đôi khi hiển thị:

[object Object]

hoặc một số như vậy.


3
chỉ in [đối tượng Đối tượng] cho Chrome và Firefox. <shrug>
slashdottir

1
@slashdottir Nó hoàn toàn hoạt động trong Chrome và FF. Tôi sử dụng nó trong Chrome ít nhất mỗi tuần và thỉnh thoảng trong FF.
Tim

1
@Tim: bạn nói đúng, nó hoạt động. xin lỗi. lỗi của người dùng
Slashdottir

Làm thế quái nào đây không phải là câu trả lời được chọn? Thật may mắn khi điều này đã được trả lời vào ngày sinh nhật của tôi 4 năm trước, khi tôi không sử dụng js.
Joey Carson

2
Trong Meteor (phía máy chủ), nó sẽ in my object: %o. Không hữu ích lắm :)
Erdal G.

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
Cập nhật mã của bạn bằng cách thay đổi tên hàm, như trong lệnh gọi đệ quy, nó được gọi là "dump" trong khi xác định thời gian "mydump" của nó
Vikas

7
Sao chép và dán của: binnyva.blogspot.com/2005/10/...
utopianheaven

1
này giết chết Chrome và Firefox với "quá nhiều đệ quy" khi được sử dụng để kiểm tra một đối tượng jquery
slashdottir

@slashdottir nó rất dễ dàng để sửa chữa, bởi việc kiểm traif (level > 10) return level_padding + '<< too deep >>';
John Henckel

"Quá nhiều đệ quy" xảy ra do tham chiếu vòng tròn (khi tham số con của một đối tượng tham chiếu đến đối tượng cha của nó). Có thể được giải quyết bằng cách ghi nhớ tất cả cha mẹ của giá trị hiện tại và nếu giá trị hiện tại khớp với một trong những giá trị của cha mẹ, hãy ngừng đào sâu hơn.
Alex Velickiy

42

Nếu bạn đang sử dụng Chrome, Firefox hoặc IE10 + tại sao không mở rộng bảng điều khiển và sử dụng

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

cho một giải pháp ngắn gọn, trình duyệt chéo.


Tôi thích cái này. Đặc biệt là đối với trình duyệt không hỗ trợ kết xuất đối tượng.
Aley

Và có thể thay thế "else console.log (object);" với một cuộc gọi đến một chức năng tùy chỉnh traversal như trong stackoverflow.com/a/3011557/2236012 trên ...;)?
CB

@CB "quá nhiều đệ quy" và trình duyệt bị đóng băng là những gì tôi gặp phải trong Firefox và Chrome.
slutdottir

3
JSON.stringify không thể tuần tự hóa cấu trúc tuần tự. Nó sẽ không hoạt động cho tất cả các đối tượng.
Grzegorz Luczywo

24

Chỉ dùng:

console.dir(object);

bạn sẽ nhận được một biểu diễn đối tượng có thể nhấp đẹp. Hoạt động trong Chrome và Firefox


1
Chrome và Firefox cung cấp [đối tượng Đối tượng]
Slashdottir

Bạn có thể kiểm tra nó trong Bảng điều khiển (Lượt F12) với console.dir({bar:"foo"}); Đối tượng của bạn có ghi đè phương thức toString không?
gió droid

dường như ít nhất cũng đang hoạt động trong bảng điều khiển. có lẽ là userr của tôi. cảm ơn bạn
Slashdottir

một tính năng ngọt ngào như vậy
tomalone

12

Đối với Chrome / Chromium

console.log(myObj)

hoặc nó tương đương

console.debug(myObj)


4

Việc sử dụng console.log(object)sẽ ném đối tượng của bạn sang bảng điều khiển Javascript, nhưng đó không phải lúc nào cũng là điều bạn muốn. Việc sử dụng JSON.stringify(object)sẽ trả về hầu hết nội dung được lưu trữ trong một biến, ví dụ như gửi nó đến đầu vào textarea và gửi nội dung trở lại máy chủ.


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.