2012-10-09 37 views
5

thể trùng lặp:
Is Chrome's JavaScript console lazy about evaluating arrays?Tại sao Chrome hiển thị giá trị bị xóa khỏi mảng trước khi nó được?

console của Chrome js được hiển thị một mảng với một giá trị xóa trước khi giá trị này sẽ bị xóa. Tại sao?

jsFiddle that demonstrates this behavior.

var list=[]; 
list.push("one"); 
list.push("two"); 
list.push("three"); 
console.log(list);      //["two", "three", undefined × 1] 
$("#output").append(JSON.stringify(list));//["one","two","three"] 

list.shift(); 

$("#output").append($("<br>")); 

console.log(list);      //["two", "three"] 
$("#output").append(JSON.stringify(list));//["two","three"] 

+0

Có thể có nhiều câu trả lời có thẩm quyền hơn về các câu hỏi tương tự: http://stackoverflow.com/questions/4198912/bizarre-console-log-behaviour-in-chrome-developer-tools, http://stackoverflow.com/question/11214430/sai-value-in-console-log, http://stackoverflow.com/questions/11118758/bug-in-console-log –

+0

http://stackoverflow.com/questions/4057440/is-chromes -javascript-console-lazy-về-đánh giá-mảng? lq = 1 –

+0

chúng tôi có một loạt các câu hỏi trùng lặp cho vấn đề này? –

Trả lời

6

Trong Chrome console.log là "trì hoãn"; trong trường hợp này đến cuối Chương trình tôi tin.

Đó là, trong Chrome, console.logkhông stringify đối tượng đầu vào ngay lập tức nhưng thay vì thực hiện các stringification "một thời gian sau" (sau đó các đối tượng đã được sửa đổi trong trường hợp này) nhưng trước khi nó thực hiển thị các kết quả,

console.log(JSON.stringify(list)) sẽ hiển thị kết quả mong đợi.


này đã được báo cáo như là một lỗi as far back as Chrome 5 (mục tiêu lỗi-sửa chữa là Mstone-22, vì vậy không Chrome 20/21?) Và cách khắc phục đã được bổ sung vào cơ sở webkit:

Tính đến hôm nay, việc đổ một đối tượng (mảng) vào bảng điều khiển sẽ dẫn đến các thuộc tính của đối tượng được đọc khi mở rộng đối tượng điều khiển (tức là lười biếng). Điều này có nghĩa là bán phá giá cùng một đối tượng trong khi đột biến nó sẽ khó khăn để gỡ lỗi bằng cách sử dụng giao diện điều khiển.

Thay đổi này bắt đầu tạo bản xem trước được viết tắt cho các đối tượng/mảng tại thời điểm ghi nhật ký của họ và chuyển thông tin này dọc theo giao diện người dùng. Điều này chỉ xảy ra khi giao diện người dùng đã được mở, nó chỉ hoạt động đối với console.log(), không tương tác với giao diện điều khiển trực tiếp.

+0

thực sự có vẻ như vậy. bạn có một tham chiếu cho điều đó không? –

+0

@ antony.trupe Thật không may, không: ( –

+0

Nếu nó là một lỗi, sau đó nó nên được gửi đến [crbug.com] (http://crbug.com/)? –

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