2012-03-13 64 views
7

Một vấn đề rất lạ.Console.dir() trong javascript hoặc firefox không đồng bộ?

Trong quá trình gỡ lỗi, tôi thấy rằng console.dir (anArray) không xuất ra giá trị hiện tại trên bảng điều khiển firebug của trình duyệt.

Ví dụ,

console.dir(anArray)    //line 1 
console.log(anArray[0].prop1)  //line 2 
code to change the value of anArray[0].prop1 //line 3 

các anArray là một mảng đối tượng javascript/json,

trong giao diện điều khiển Firbug của, dòng 1 đầu ra các giá trị mới, được thiết lập ở dòng 3,

và dòng 2 là giá trị cũ, và là những gì tôi muốn.

Giải thích duy nhất là console.dir() là không đồng bộ, đúng không ?!

env của tôi: Windows7, Firefox 6.0.2, 1.9.1 firebug, javascript lib là Dojo (nhưng tôi nghĩ rằng không có gì để làm với nó.)

Cảm ơn.

Trả lời

0

Tóm lại, có. :)

Tôi đã gặp sự cố tương tự với Chrome trước đây không hiểu kết quả bảng điều khiển của mình, nhưng tôi đã chạy một vài thử nghiệm và phát hiện ra rằng đó là hành vi không đồng bộ. Trong thực tế, đặt cược tốt nhất của tôi là nó sử dụng internaly một setTimeout() để trì hoãn nhật ký. console.log dường như cũng bị ảnh hưởng trong trường hợp của tôi.

0

Nhật ký bảng điều khiển đôi khi phát hiện lỗi như vậy. Nó cũng kém mạnh mẽ hơn trong Internet Explorer (một nơi phổ biến để tìm lỗi), nơi nó không thể in những thứ như các đối tượng và các tài liệu XML.

Tôi khuyên bạn nên thay vì sử dụng console.log thay vì bạn cố gắng tìm hiểu cách sử dụng các trình gỡ rối mạnh mẽ mà trình duyệt tạo sẵn. Khi bạn bị tạm dừng trên một điểm ngắt, bạn có thể kiểm tra tất cả các biến, chạy các câu lệnh tùy ý trên bàn điều khiển và đi lên và xuống theo dõi ngăn xếp.

0

Đó là một lỗi trong cả Firefox và Chrome: chạy trong giao diện điều khiển:

console.log(a = {b: { c: 0}}); 
a.b.c = 1; 

kết quả trong Firebug:

b: Object { c= 1 } 

kết quả trong Chrome:

b: Object 
    c: 1 
2

Điều quan trọng với console.dir (ít nhất là trong Chrome, dựa trên kinh nghiệm của tôi và bởi this) là việc mở rộng đánh giá và hiển thị giá trị hiện tại của đối tượng, tại thời điểm bạn thực hiện mở rộng, không phải tại thời điểm cuộc gọi console.dir().

Xem ví dụ

<html><body> open/refresh this with the javascript console open 
<script> 
var ar = new Float32Array(1); 
ar[0]=2; 
console.log(ar[0]); 
console.dir(ar); 
ar[0]=200; 
</script> 

Khi bạn mở rộng mảng trong giao diện điều khiển, bạn sẽ thấy giá trị 200.

Nó không phải là một lỗi, và nó chắc chắn là một điều thực hiện (đối tượng có thể rất lớn), nhưng hành vi là lạ, và có khả năng gây nhầm lẫn.

Hơn nữa, tôi đã thử nghiệm rằng nếu giá trị thay đổi sau đó, bảng điều khiển không cập nhật (vì vậy nó không hoạt động như một cửa sổ 'đồng hồ' trong trình gỡ lỗi).

Các vấn đề liên quan