2010-11-16 35 views
5

Tôi gặp lỗi lạ trong Chrome ... hãy xem ảnh chụp màn hình bên dưới.Không thể đặt thuộc tính ... của undefined --- bizarre

Tôi xác định bản ghi bằng cách sử dụng cú pháp ngữ pháp đối tượng.

Tôi thử đặt thuộc tính "id" và nhận ngoại lệ.

Tôi đã thử cả hai:

record['id'] = 'wtf'; 

và cũng

record.id = 'wtf'; 

tôi sử dụng loại cú pháp ở khắp nơi trong kịch bản của tôi .... những gì có thể xảy ra ở đây? Đây có phải là lỗi trong Chrome không?

alt text

EDIT: tôi đã giải quyết được vấn đề đối với bây giờ, nhưng tôi vẫn không chắc chắn lý do tại sao điều này xảy ra. Tôi đã di chuyển định nghĩa bản ghi xảy ra bên ngoài khối nếu. Có ai biết chuyện gì có thể xảy ra không? Tôi nghĩ rằng tất cả các khai báo biến được scoped đến chức năng và do đó đây không phải là một vấn đề.

+0

Tôi không thể tạo lại lỗi (trên Chrome 7 và Firefox trên máy Mac). Từ thông tin ở đây và ảnh chụp màn hình, có vẻ như không có gì sai với mã của bạn. Giá trị của 'record' ngay trước dòng" sai "là gì? – nickf

Trả lời

15

Vấn đề rất có thể là dl nhỏ hơn hoặc bằng không, vì vậy tuyên bố khởi tạo record không được thực thi. Từ thụt đầu dòng của bạn, có vẻ như bạn dự định cho cả hai tuyên bố là một phần của khối if, nhưng không có niềng răng, tuyên bố record['id'] = 'wtf'; được thực thi bất kể điều gì.

Bằng cách di chuyển biến khởi tạo bên ngoài câu lệnh if, bạn buộc nó xảy ra trong mọi trường hợp và di chuyển nhiệm vụ bên trong khối if (trong đó, tôi giả định là những gì bạn muốn).

Có lẽ một cách tốt hơn để giải quyết nó sẽ bổ sung niềng răng như thế này:

if (dl > 0) { 
    var record = {}; 

    record.id = 'wtf'; 
} 

Trừ khi bạn thực sự muốn khởi record trong cả hai trường hợp.

Bạn đúng về các biến khai báo biến bị scoped vào hàm, nhưng việc gán không xảy ra cho đến khi bạn đến điểm đó trong mã. record nằm trong phạm vi nhưng vẫn có giá trị mặc định là undefined vì bạn chưa gán bất kỳ thứ gì cho nó.

+0

Rất tiếc. Một số lỗi là tự gây ra. Đẹp bắt! – rvandervort

0

Làm việc cho tôi, không có lý do gì không hoạt động. Bạn có chắc nó đề cập đến dòng chính xác đó không? nếu bạn alert(record) trước khi bạn đặt? Bạn đã cố gỡ lỗi chưa?

+0

Thực ra, tôi nghĩ rằng tôi đã giải quyết được vấn đề ngay bây giờ ... nhưng tôi vẫn không chắc tại sao điều này lại xảy ra. Tôi đã chuyển định nghĩa của bản ghi bên ngoài khối if và nó có vẻ hoạt động ... Tôi sẽ cập nhật câu hỏi chính. – rvandervort

+0

@rvandervort: nếu bạn phát hiện ra nguyên nhân, hãy chắc chắn chia sẻ lý do! – nickf

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