2014-04-14 18 views
9

Tại sao trình gỡ lỗi Chrome bỏ qua các lệnh xóa? Các mã sau đây sẽ chứng minh quan sát nếu chạy trong một giao diện điều khiển.Tại sao trình gỡ lỗi Chrome bỏ qua các lệnh xóa?

(function() { 
    var foo = { bar: true }; 
    debugger; 
    delete foo.bar; 
})(); 
+1

Điều này thật kỳ lạ, tôi chưa bao giờ nhận thấy điều đó trước đây. Nó đi qua một câu lệnh tạo ra một đối tượng var foo = {} vì vậy nó chỉ có nghĩa là nó cũng nên đi qua lệnh delete. Không thể tìm thấy bất kỳ lời giải thích bất cứ nơi nào mặc dù. – sublime

+2

Ai đó trước đây đã [nộp lỗi] (https://code.google.com/p/v8/issues/detail?id=2957) với V8, mặc dù chưa có bất kỳ phản hồi nào đối với nó. –

+2

Kiểm tra [this] (http://perfectionkills.com/understanding-delete/#delete_and_host_objects) thuật toán cho 'xóa'. Điều thú vị là, trình gỡ lỗi không dừng lại cho một số kịch bản xóa khác (chẳng hạn như 'delete foo'). – unclekyky

Trả lời

1

Câu trả lời ở đây là bản chất của lệnh 'xóa' nó không phải là chức năng chung như bạn thường dùng trong js. Tôi đoán là các công cụ chrome được đặt để dừng trên mọi dòng có chứa định nghĩa đối tượng hoặc đối tượng đang chạy phương thức, đằng sau hậu trường hầu như mọi thứ gặp trong javascript là đối tượng, tuy nhiên, xóa không phải là đối tượng mà là toán tử như ' + 'hoặc' - '. Và lý do nó bị bỏ qua là bởi vì đây sẽ là lần duy nhất bạn sẽ có một dòng mà không ném một lỗi nhưng không xác định hoặc gọi một đối tượng.

+1

'xóa' sẽ gây ra lỗi khi được sử dụng ở chế độ nghiêm ngặt trên thuộc tính không định cấu hình được. –

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