2009-02-28 36 views
5

Sử dụng tính năng Diggit/Blog nhỏ của StackOverflow mô tả here:Hiểu JavaScript - Resource

Tôi muốn gửi video nói chuyện công nghệ của Google sau Tôi vừa nhìn thấy và tôi tìm thấy khá thú vị.

Tôi luôn gặp sự cố khi hiểu javascript "tự nhiên".

Ở đây, JavaScript good parts được mô tả bởi Douglas Crockford

Tôi hy vọng bạn tìm thấy liên kết này hữu ích.

Bây giờ, phần câu hỏi:

Khiếu nại của bạn về javascript là gì? Bạn có sử dụng IDE để chỉnh sửa javascript không? Bạn có nghĩ video này giúp hiểu "phần tốt" không?

Trả lời

17

JavaScript: phần xấu.

  1. Sai lầm lớn nhất là phát hiện lỗi trễ. JavaScript sẽ vui vẻ cho phép bạn truy cập một thành viên đối tượng không tồn tại, hoặc truyền số lượng đối số sai cho một hàm, và lấp đầy khoảng trống bằng các đối tượng 'không xác định', trừ khi bạn cố ý kiểm tra chúng (điều này không thực tế), sẽ gây ra một ngoại lệ hoặc tạo ra một giá trị không mong muốn sau này. Có thể sau này, kết quả là các lỗi tinh vi và khó gỡ lỗi xuất hiện ở đâu đó gần mã sự cố thực tế. Những điều kiện này nên đã tạo ra ngoại lệ, ngoại trừ JS ban đầu không có ngoại lệ để nâng cao. 'Undefined' là một bản hack nhanh chóng và bẩn thỉu mà chúng ta đang mắc phải.

  2. Biến không được khai báo mặc định thành phạm vi toàn cầu. Điều này gần như không bao giờ là thứ bạn muốn và có thể gây ra lỗi tinh vi và khó gỡ lỗi khi hai hàm đều quên ‘var’ và bắt đầu chạy cùng một toàn cục.

  3. Mô hình hàm xây dựng là lạ ngay cả đối với ngôn ngữ dựa trên nguyên mẫu-OO và gây lẫn lộn cho người dùng có kinh nghiệm. Việc quên ‘mới’ có thể dẫn đến lỗi tinh vi và khó gỡ lỗi. Trong khi bạn có thể tạo ra một hệ thống lớp/thể hiện dễ hiểu, không có tiêu chuẩn và hầu hết các hệ thống lớp được đề xuất trong các hướng dẫn ban đầu mà mọi người vẫn đang sử dụng đều không đủ, và làm xáo trộn JavaScript đang thực sự làm gì.

  4. Thiếu phương pháp bị ràng buộc. Hoàn toàn không trực quan khi truy cập “object.method” khi gọi nó tạo ra kết nối ma thuật với ‘đối tượng’ trong ‘this’, nhưng truyền “object.method” làm tham chiếu mất kết nối; không có ngôn ngữ nào khác hoạt động theo cách này. Khi điều này xảy ra, ‘this’ được đặt thành một giá trị không mong muốn, nhưng nó không phải là 'không xác định' hoặc cái gì khác sẽ làm tăng ngoại lệ. Thay vào đó, tất cả quyền truy cập thuộc tính sẽ kết thúc bằng ‘cửa sổ’, gây ra lỗi tinh vi và khó gỡ lỗi sau này.

  5. Không có loại số nguyên. Số trông giống như một nhưng chia nhỏ theo nhiều cách khác nhau (ví dụ: n + 1 == n cho đủ cao n). Bất cứ lúc nào một NaN hoặc Infinity lẻn vào (khá bất ngờ nếu bạn nghĩ rằng bạn đang đối phó với các số nguyên), bạn sẽ không tìm ra ngay lập tức; thay vào đó sẽ có lỗi tinh vi và khó gỡ lỗi xuống dòng.

  6. Không có loại mảng liên kết. Đối tượng trông giống như một nhưng phá vỡ dưới các phím bất ngờ khác nhau. Mảng không phải là danh sách thuần túy. Bất cứ lúc nào bạn sử dụng ‘for… in’, bạn có thể rơi vào bẫy, và sẽ trải nghiệm ... có, lỗi tinh tế và khó gỡ lỗi.

  7. Thường xử lý chuỗi kém, ít nhất đối với ngôn ngữ kịch bản. String.split (, limit) và String.replace() không làm những gì bạn nghĩ, gây ra ... bạn biết đấy. Kết quả của toString() nói chung là người nghèo và không hữu ích cho việc gỡ lỗi. Trong khi đó chúng ta đang mắc kẹt với một đống rác mà Netscape nghĩ có thể hữu ích, như String.prototype.blink(), và lối thoát vĩnh viễn(). Yay.

  8. sau đó có tất cả sự khác biệt trình duyệt (IE vẫn còn thiếu rất nhiều các phương pháp cần thiết trên các đối tượng cơ bản), và DOM ...

  9. Và cuối cùng, ngay cả khi một ngoại lệ không xảy ra , nó được ẩn đi khỏi tầm nhìn, vì vậy tác giả thậm chí sẽ không nhận ra điều gì đó sai. Kết quả là hầu hết các trang web đều chứa đầy lỗi; bật báo cáo lỗi JavaScript đầy đủ trong IE và kết quả là không sử dụng được.

Điều này khiến tôi nghĩ rằng một thế hệ lập trình mới đang học ngôn ngữ này như một ngôn ngữ đầu tiên. Điều tồi tệ hơn, hầu hết tài liệu hướng dẫn mà họ đang học từ (“My fiRST AEWsome R0LL0VERZ!”) Luôn khuyến khích thực hành tồi tệ nhất có thể. URL 'javascript:', 'eval()' cho mọi thứ, quyền truy cập DOM dành riêng cho trình duyệt ... oy.

+0

+1 để đề cập đến việc mặc định thành các hình cầu :-) – bandi

+0

Tốt hơn là học C, hoặc cơ bản là ngôn ngữ đầu tiên. – Breton

1

Phần cứng về javascript, theo ý kiến ​​của tôi, là:

  1. phát triển trình duyệt Cross/gỡ lỗi vấn đề
  2. vấn đề
  3. Chữ thập duyệt dom/mô hình (sự kiện bọt, vv ...)
  4. Thiếu "lớp" (chủ quan)
  5. Thiếu sự hỗ trợ gỡ lỗi rắn tốt trong các trình duyệt

Firebug giúp ích rất nhiều cho FireFox, nhưng tôi đã không tìm thấy bất cứ thứ gì tốt cho IE - và thực tế là người ta phải gặp khó khăn.

Về mặt tươi sáng, nếu bạn xây dựng tập lệnh từ đầu và hiểu từng bước, nó có thể thực sự thú vị và mạnh mẽ.

+0

Có rất nhiều triển khai lớp học trong JS, nếu bạn đang ở trong loại điều đó. Tôi thích bản thân mình. – Zach

1

Khiếu nại lớn nhất của tôi trong khi sử dụng JavaScript là các ràng buộc DOM, nhưng chúng không thực sự là lỗi của JavaScript nhiều như mỗi trình duyệt thực hiện theo cách riêng của chúng. Cùng với những dòng đó, IE là kẻ phạm tội tồi tệ nhất.

Về mặt các vấn đề JavaScript thuần túy, tôi vẫn không hoàn toàn tạo mẫu thử theo cách cho phép tôi sử dụng toàn bộ sức mạnh của nó; nhưng đó là một khiếu nại ít hơn so với thất bại cá nhân của riêng tôi. Là một ngôn ngữ tôi thích JavaScript rất nhiều và mọi khiếu nại tôi có trên nó đều bị lu mờ bởi các tương tác của nó với DOM.

Tôi sử dụng Firefox + Firebug mạnh mẽ để mã hóa và gỡ lỗi chính của mình. Có những trình gỡ rối trong Opera và Safari mà tôi sử dụng nếu một trong hai trình duyệt có vấn đề cụ thể. Trời giúp tôi khi tôi cần gỡ lỗi IE.

Tôi mã trong bất kỳ trình soạn thảo văn bản nào có sẵn và có đánh dấu cú pháp. Tôi có xu hướng sử dụng khung công tác YUI, nhưng đó chỉ là vì tôi biết nó là tốt nhất; Tôi hy vọng một ngày nào đó sẽ tìm hiểu thêm về các khung công tác khác và quyết định điều gì sẽ là tốt nhất cho các dự án cá nhân.

Trong khi tôi chưa xem video, tôi chỉ đọc "The Good Parts" trong tuần này. Nếu video giống như cuốn sách, nó sẽ rất hữu ích. Bản thân cuốn sách rất tuyệt vì nó ngắn gọn và mang tính thông tin. Nó đi vào một mức độ thảo luận ngôn ngữ mà một người không nhìn thấy thường xuyên đủ khi Googling cho thông tin, cung cấp cho người ta một sự hiểu biết tốt hơn về ngôn ngữ nói chung.

0

Tôi thực sự thích tạo mẫu, cảm giác mạnh hơn nhiều so với các lớp thông thường.

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