Năm hoặc ít hơn các mẹo để viết JavaScript tốt? [đóng cửa]


14

JavaScript rõ ràng đã trở nên khá cần thiết; tuy nhiên, tôi vẫn chưa quen với nó và tôi thấy thật khó để chống lại cảm giác rằng nó có vẻ như là một mớ hỗn độn và tôi không muốn đối phó với nó ngay bây giờ. Tôi hiểu sâu hơn về các ngôn ngữ khác so với tôi với JavaScript, vì dường như tôi không thể kiểm soát được nỗi sợ này. Tôi có cảm giác rằng, khi tôi đang viết JavaScript, tôi đang cố vẽ một bức chân dung của những chú cún Weimaraner.

Nó thường giúp tôi giữ một số chỉ thị quan trọng nhất trong tâm trí mà tôi có thể tự hỏi mình cho mỗi động tác tôi thực hiện. (Theo suy nghĩ của tôi, một số ít là năm hoặc ít hơn.)

Bạn có thể liệt kê năm (hoặc ít hơn) câu hỏi cụ thể cho JavaScript Tôi nên tự hỏi mình cho mỗi lần tôi thực hiện, khi tôi đang mã hóa JavaScript? Họ sẽ là gì?

Cập nhật: để làm rõ, tôi không yêu cầu năm điều cần lưu ý khi học JavaScript; Tôi đang hỏi năm câu hỏi để luôn tự hỏi mình về phía trước, rằng mọi người nên hỏi. Các câu hỏi cấp cao như: "Tôi có khả năng lặp lại điều này ở nơi khác không?" hoặc "tên biến / tên hàm này đủ cụ thể (hoặc quá cụ thể)" <== ngoại trừ những câu hỏi ví dụ này không đặc biệt với JavaScript. Tôi đang tìm kiếm các chỉ thị đặc biệt với JavaScript.


3
Câu hỏi như được đặt ra là khuyến khích nhiều câu trả lời, mỗi câu trả lời sẽ có giá trị như nhau. Những loại câu hỏi không tạo ra câu hỏi hay. Bạn có thể viết lại tất cả? Nếu không, nó là một cơ hội tốt để được đóng cửa.
ChrisF

2
"Danh sách top 5" không phải là những gì chúng tôi làm ở đây trên Lập trình viên. Nếu bạn muốn tìm câu trả lời cho một vấn đề cụ thể mà bạn đang gặp phải, vui lòng hỏi về vấn đề đó. Mặt khác, tôi đề nghị r / Lập trình của Reddit để tạo các danh sách như thế này.

Câu trả lời:


6

Tôi sẽ trả lời điều này trong hai phần. Một là "Năm hoặc ít hơn các mẹo về học viết JavaScript tốt". Cái còn lại là "Năm hoặc ít hơn các mẹo viết JavaScript tốt".

Học tập:

  1. Hỏi câu hỏi
  2. Nghe
  3. Đọc
  4. Làm đồ

Đang làm:

  1. Tránh toàn cầu (mô đun hóa)
  2. Thực hiện các công cụ cứng bên ngoài các vòng lặp (lựa chọn DOM, khai báo hàm, v.v.)
  3. Tìm hiểu cách hoạt động của phạm vi
  4. Tìm hiểu khi nào và làm thế nào để sử dụng đóng cửa
  5. Tìm hiểu cách hoạt động của JS hướng đối tượng

EDIT (thêm câu hỏi để tuân thủ OP):

Tôi đang tham khảo phạm vi nào?

Điều này sẽ giúp với toàn cầu bị rò rỉ, xử lý sự kiện và khi nào nên sử dụng đóng cửa.

Tôi đang lặp lại chính mình?

Trừu tượng đúng và sử dụng các kỹ thuật OO là rất quan trọng. Sử dụng chúng một cách khôn ngoan.

Là mã của tôi lặp lại chính nó?

Thật dễ dàng để thấy rằng bạn đặt quyền truy cập DOM vào một vòng lặp hoặc tạo các hàm (ẩn danh hoặc cách khác) trong một vòng lặp. Lưu ý rằng điều này có thể đúng với mã sử dụng setTimeouthoặc setIntervalcác vòng lặp truyền thống.

Điều này có nghĩa là những gì tôi nghĩ nó có nghĩa?

Các giá trị trung thực và sai lệch trong JS có thể hơi khó, đặc biệt là khi sử dụng các so sánh không nghiêm ngặt ( ==trái ngược với ===). Gõ động, kiểu ép buộc và liệu bạn có tham khảo các đối tượng hoặc nghĩa đen cũng có thể có liên quan hay không.


28

Đầu tiên, biết làm thế nào công nghệ đằng sau nó hoạt động.

Bạn cần biết điều này bởi vì kiến ​​thức đằng sau cách thức hoạt động của nó, bởi vì bạn sẽ gặp phải các vấn đề về mạng, hoặc, như tôi đã thấy vô số lần, mọi người hoàn toàn hiểu được phía máy chủ và phía máy khách thực sự là gì. Một trong những câu hỏi phổ biến nhất mà tôi thấy là "Làm cách nào tôi có thể làm cho JS thay đổi một biến trong mã ASP của mình?!"

  • Bạn có hiểu ethernet / wifi và TCP / IP để có ý tưởng chung về những gì đang diễn ra không?
  • Bạn thực sự biết bao nhiêu HTTP?
  • Bạn có thực sự nhận được HTML không? Chắc chắn, bạn có thể biết làm thế nào các thẻ hoạt động và lồng công cụ, nhưng bạn có thực sự hiểu chế độ doctype và quirks? Bạn có hiểu rằng bạn không nên đặt các thẻ đoạn xung quanh một thành phần danh sách?
  • Phát minh JavaScript (và giải thích nó có thể chạy phía máy chủ). ecmascript, lifcript, mocascript, jsscript, nút ...
  • Tìm hiểu API cửa sổ, tìm hiểu API DOM và tìm hiểu API XHR. Nếu bạn không biết ba điều này, bạn không có mã viết kinh doanh cho trình duyệt.

Hiểu mã của bạn lớn hơn bạn hoặc tình huống cụ thể của bạn

  • Chắc chắn, bạn đã viết một cái gì đó, nhưng mọi người đều có thể nhìn thấy nó. Đó là tất cả nguồn "mở". Chắc chắn, bạn có thể làm xáo trộn nó, minifiy nó, bất cứ điều gì ... vào cuối ngày, nếu tôi muốn xem mã của bạn, việc tôi đánh bại bất kỳ phương pháp nào bạn áp dụng là chuyện nhỏ.
  • Bạn cần hiểu sự khác biệt của nhiều trình duyệt. Nhắm mục tiêu những cái phổ biến nhất, hoặc những cái mà nhân khẩu học thị trường của bạn có. Chẳng hạn, eg6 sẽ không hiển thị các phần tử ô bảng DOM nếu bạn chắp thêm thay vì các phương thức API DOM dành riêng cho các bảng. Nhiều ví dụ tồn tại, bạn cần học chúng.
  • Bạn cần hiểu cách viết mã xung quanh tất cả các vấn đề này trong trình duyệt, không phải trình duyệt cụ thể của bạn. Bạn sẽ nhanh chóng học được những thứ hoạt động tốt trong một trình duyệt chậm ở một trình duyệt khác. Bạn sẽ phải tìm ra cách các trình duyệt hoạt động và tại sao chúng khác nhau.
  • Vì tình yêu của bộ râu Odin, đừng viết mã cho phép tôi thực hiện các cuộc tấn công kịch bản chéo trang trên mã của bạn. Nếu bạn thực hiện một cuộc gọi ajax đến một tế bào và làm điều gì đó tương tự cell.innerHTML = "<script>alert("xss")</script>", và một hộp cảnh báo xuất hiện, bạn đã làm sai.
  • Tránh xa địa ngục đẫm máu khỏi DynamicDrive, w3Schools và các trang web đưa ra lời khuyên tồi. Bạn cần tìm những cơ hội đưa ra lời khuyên tốt. Ở đây trên Stack Overflow, chúng tôi có các phòng trò chuyện JavaScript và Node.JS và chúng tôi cố gắng hết sức để tiếp tục vượt qua giới hạn của những gì "tốt hơn", khi các trang web như w3 giữ dữ liệu lỗi thời và không bao giờ bận tâm đến nó. Bạn nên gắn bó với các trang web thông số chính thức như W3C , Mạng lưới nhà phát triển Mozilla (MDN). Yêu cầu đánh giá ngang hàng mã của bạn. Khi bạn cảm thấy như bạn đang làm điều gì đó đau đớn với mã của mình, khi bạn thực hiện nhiều thao tác cắt + dán + chỉnh sửa với mã của mình, bạn nên đến ngay phòng trò chuyện và yêu cầu hướng dẫn viết mã tốt hơn.
  • Khi bạn đến để được hướng dẫn, hoặc muốn chia sẻ điều thực sự tuyệt vời mà bạn đã thực hiện ... xin vui lòng, xin vui lòng. Xin vui lòng, đảm bảo rằng bạn đã ghi lại nó, đảm bảo tên biến của bạn có ý nghĩa, đảm bảo rằng nó không phải là tất cả một dòng. Bạn cần viết mã sạch. Nếu bạn có một đống rác, không chỉ bạn thất bại, không ai biết cách giúp bạn sẽ muốn . Giúp chúng tôi giúp bạn.
  • Bạn muốn viết JavaScript-- thật tuyệt, hãy tôn trọng rằng không phải ai cũng hỗ trợ JavaScript. Hai lý do cho việc này-- 1) Internet nhanh hơn cho tất cả mọi người (thay vì "ajax tất cả mọi thứ" dẫn đến trải nghiệm chậm hơn). 2) Web dễ truy cập hơn đối với mọi người trên các trình duyệt dựa trên bảng điều khiển, những người chạy không có tập lệnh, điện thoại di động. Điều tôi đang cố gắng nói là, trang web của bạn sẽ xuống cấp một cách duyên dáng nếu ai đó không có JavaScript và ít nhất, hãy sử dụng <noscript>các thẻ để cảnh báo họ như vậy.
  • Do bản chất nguyên mẫu của JavaScript, bạn có thể thay đổi cách ngôn ngữ thực sự hoạt động - điều này thực sự ngọt ngào. Bạn thấy đấy, JavaScript đang phát triển, chúng tôi sẽ rút ra "ECMA Script 3", đây là phiên bản cũ hơn của JS và vào "ECMA Script 5" (hay còn gọi là es5). Do nguyên mẫu, chúng tôi có thể sửa ngôn ngữ es3 trong trường để hoạt động như es5. Điều đó có nghĩa là, tức là, một trình duyệt 10 năm tuổi có tính năng ngôn ngữ xuất hiện vào năm ngoái. Sử dụng es5-shims bất cứ nơi nào bạn có thể, chúng thực sự rất tuyệt và bạn cần xem xét nó.
  • Thế giới phương Tây của những đứa trẻ da trắng nói tiếng Anh không phải là những người sử dụng internet. Mã phù hợp. Điều này có nghĩa là bạn cần hiểu quốc tế hóa, và viết mã đáp ứng nhu cầu cao hơn. 10 năm trước có ít hơn 500 triệu người trực tuyến, ngày nay là khoảng 2 tỷ, và trong 10 năm nữa? Có lẽ gần với mọi người trên hành tinh sẽ có quyền truy cập internet, điều đó có nghĩa là bạn cần hỗ trợ các tên không phù hợp với quy tắc /[a-z ']/i, nhưng bao gồm tiếng Hindi, tiếng Ả Rập, dấu (đây là một vấn đề hiện có từ các nhà phát triển thiển cận), Trung Quốc , và những người khác. Hiểu các bộ ký tự, Unicode và UTF-8.

Bạn là một lập trình viên, không phải là một nhà máy mì ống. Ngừng viết spaghetti.

  • Đặt tên cho biến của bạn sau những điều có ý nghĩa.
  • Tài liệu mã của bạn. Tôi không quan tâm nếu bạn đang sử dụng JSDoc được cung cấp bởi tê giác hoặc bạn có một loạt các nét vẽ nguệch ngoạc. Viết tài liệu giúp người sẽ sử dụng mã của bạn. Viết tài liệu cho ai đó muốn cải thiện hoặc duy trì mã của bạn. Bao gồm các ý kiến ​​hữu ích. Nhận xét như "This fizzes the bizz"hoặc những người nửa tiếng Anh nửa tiếng Pháp không hữu ích. Mô tả những gì một chức năng làm. Mô tả các phần phức tạp của mã.
  • Chỉ ra làm thế nào để hạn chế sự lặp lại của mã. Tìm kiếm thiết kế mô-đun hoặc các mẫu chức năng. Xem những gì bạn có thể trừu tượng. Bạn không bao giờ nên kết thúc việc cắt + dán + điều chỉnh các đoạn mã lớn để làm điều tương tự.
  • Bạn cần hiểu API DOM. Các đối tượng DOM và cửa sổ cung cấp cho rất nhiều điều tuyệt vời. Điều này nghe có vẻ nhiều công việc nhưng đó là vì đó là một từ viết tắt đáng sợ lớn. Rất nhiều ninja JavaScript thích viết mã như <a href="javascript:alert("foo")">. FFS KHÔNG LÀM RATNG. Đợi tài liệu đầy đủ được tải, tách mã JavaScript của bạn khỏi tài liệu html. Đây là cách thực hành OOP cơ bản 101, không bao giờ sắp xếp nội dung JS hoặc CSS của bạn vào tài liệu html của bạn. Chỉ ra làm thế nào để làm điều đó đúng hoặc tìm một người biết cách chỉ cho bạn cách làm. Một lần nữa, đặt câu hỏi.
  • đó Javascript:foo("buz")là một giao thức psudeo, nó không được hỗ trợ đầy đủ và nếu bạn không sử dụng javascript trực tuyến, bạn sẽ không sử dụng nó ở nơi đầu tiên. Tôi hứa với bạn từ tận đáy lòng, không có lý do gì xảy ra trên trái đất này hoặc bất cứ nơi nào trong vũ trụ mà bạn CẦN đặt javascript của bạn bên trong một yếu tố HTML. Không bao giờ. Vì vậy, đừng làm điều đó. Tôi thậm chí sẽ không giúp những người làm điều đó nữa, điều đó thật tệ.

Tìm hiểu làm thế nào để viết mã theo cách nó không bị hỏng mọi lúc.

  • Biến toàn cầu là một trong những vấn đề lớn nhất. Chỉ ra cách lập trình chức năng trong JavaScript hoạt động. Tìm hiểu những gì cẩu là. Chỉ ra làm thế nào để tránh các biến toàn cầu.
  • Sử dụng các công cụ phân tích mã tĩnh. Những thứ này sẽ cảnh báo bạn ngay lập tức với tất cả các "oops" nhỏ mà bạn đã tạo khi viết mã. Quên một dấu chấm phẩy ở đâu đó? Ồ, nó đây rồi. Có một nơi toàn cầu? Ồ, nó đây rồi. Mã có thể gây ra một loạt các lỗi bí ẩn khi bạn cố chạy nó? OH! Họ đây rồi! Không còn phải loay hoay và nhìn chằm chằm vào một đống mã trong nhiều giờ cố gắng tìm ra thứ gì đó chỉ là lỗi cú pháp. (Chà, hầu như không, bạn có thể đã làm một cái gì đó mà nó không thể bắt được, nhưng nó thường tuyệt vời).
  • Kiểm tra đơn vị. Không có lý do gì để không như vậy. Có hàng tấn công cụ kiểm tra đơn vị ngoài kia. Về cơ bản, kiểm thử đơn vị là "Đây là chức năng của tôi" và "Tôi muốn nó xuất ra Y" "Đây là một số đầu vào kiểm tra" Và thử nghiệm là "Tất cả chúng có hoạt động không?" Có nhiều khung thử nghiệm JS, như QUnit phổ biến. Thực hiện một chuyến tham quan thông qua công cụ tìm kiếm yêu thích của bạn và xem những gì bạn thích. Nhưng sử dụng chúng.
  • Quản lý kiểm soát nguồn, còn được gọi là kiểm soát phiên bản. Git là phổ biến, và với lý do tốt. SVN cũng vậy và một vài người khác. Những gì bạn cần ngừng làm điều này ngay lập tức là chỉnh sửa mã sản xuất. Bạn cần dừng việc đổi tên các tập tin main_backup_20110911.js.bak.1Bạn bị mất nội dung, thư mục của bạn trở nên lộn xộn, bạn không thể dễ dàng "tua lại" đến thời điểm trước đó. Bạn không thể thấy những gì đang xảy ra, bạn không thể tạo ra các bản vá mã. Vì vậy, chỉ cần bắt đầu học GIT, bạn sẽ mất một giờ và bạn sẽ không bao giờ quay lại.
  • Đánh giá ngang hàng. Bạn không phải tốt, không phải là I. Tôi trở nên tốt hơn bằng cách yêu cầu thông tin phản hồi càng nhiều càng tốt tôi có thể. Đó là cách bạn cũng nên làm điều đó.

Viết JavaScript mà mọi người yêu thích

  • Tìm hiểu tại sao mã của bạn chậm. Sử dụng jspref và tạo các bài kiểm tra.
  • Dừng các sự kiện ràng buộc với một thành phần DOM, nó chậm và tạo ra các sự cố bong bóng sự kiện nghiêm trọng sẽ lãng phí rất nhiều thời gian của bạn. Nghiên cứu "phái đoàn sự kiện" bằng JavaScript.
  • DỪNG bằng cách sử dụng InternalHTML để chỉnh sửa DOM. Điều này quay trở lại việc học HTML là gì và học DOM là gì. HTML là dữ liệu được gửi từ máy chủ mà công cụ kết xuất trình duyệt của bạn sử dụng để tạo ra một loạt các đối tượng lập trình mà cuối cùng là Đối tượng Tài liệu. Khi bạn sử dụng InternalHTML, bạn sẽ yêu cầu trình duyệt của mình kết xuất lại toàn bộ. Rất may, giống như cách đây hơn 10 năm, chúng tôi đã tạo API DOM và nó cho phép bạn "chắp thêm con" hoặc "tạo nút văn bản" mà không phải cập nhật toàn bộ. innHTML là một sự ô nhục mà Microsoft đã phát minh ra - nếu bạn sử dụng nó, bạn cũng sẽ mất tất cả các đặc quyền để than vãn về IE6 là khủng khiếp vì bạn sẽ giúp nó tồn tại mãi mãi. Tìm hiểu DOM.
  • Nó cần phải làm việc ở mọi nơi có thể. Nếu một cái gì đó không được hỗ trợ, nó cần phải giảm xuống một cách duyên dáng để trải nghiệm không bị ảnh hưởng - bạn không thể tát vào mặt người dùng và gặp sự cố.
  • Bản quyền và giấy phép rất quan trọng. Đừng gạt bỏ công việc khó khăn của người khác. Nếu ai đó nói "không phải để bán lại", bạn không thể bán nó. Đừng là một kẻ ngốc, hoặc chúng tôi sẽ ghét mã của bạn vì đã loại bỏ những người làm việc chăm chỉ.
  • JS là nguyên mẫu, không phải lớp. Đừng làm thế nữa. Nếu bạn không hiểu làm thế nào nguyên mẫu hoạt động, bạn cần phải. Google nó. JavaScript không dựa trên lớp, ngừng cố gắng tạo các lớp, nó rất hiếm khi hoạt động tốt. Mọi người cố gắng viết mã cổ điển bằng ngôn ngữ nguyên mẫu và sử dụng nó như một trường hợp cho "tại sao ngôn ngữ bị hút", tôi có thể tạo ra trường hợp tương tự cho việc Ruby không thể hỗ trợ nguyên mẫu. Học một cái gì đó mới và ngừng làm sai.

Tập trung vào những điều cơ bản, luôn luôn.

  • Bạn đã sai, và điều đó thật tuyệt vời, vì bạn biết điều gì đó ngay bây giờ. Không có gì tệ hơn là một người sẽ không thừa nhận là sai và liên tục đập mã xấu ra khỏi cửa như họ là một ninja siêu anh hùng ngôi sao nhạc rock nổi loạn. Họ chỉ là những kẻ ngốc. Thừa nhận bạn có thể sai, thừa nhận bạn có thể sai, yêu cầu giúp đỡ.
  • Bạn không phải lúc nào cũng cần jQuery. jQuery tạo ra rất nhiều mã chậm và giúp những người không biết về JS viết JS. Đây là một vấn đề nữa vì JS không yêu cầu bạn biết JS để viết JS. Đi hình. Khi bạn hiểu một vài điều tôi đã đề cập ở trên, chẳng hạn như học các sự kiện, học DOM, tìm hiểu về InternalHTML, bạn sẽ thấy tại sao jQuery có thể gây hại cho mã của bạn. Nó có thể được sử dụng chính xác ở nhiều nơi, nhưng thường thì bạn có thể sử dụng một thư viện nhỏ hơn hoặc thậm chí là thở hổn hển JavaScript tiêu chuẩn đi kèm với trình duyệt của bạn để thực hiện điều gì đó. Bạn không cần jQuery để làm bất cứ điều gì, việc viết một số mã trở nên dễ dàng hơn nếu bạn đang học nhưng bạn cần bắt đầu làm tốt hơn và học nhiều hơn - khi bạn biết nhiều hơn, bạn sẽ tìm ra cách để viết mã tốt hơn trong jQuery nào.Kiểm tra một số thư viện JavaScript khác và ngừng rất gần gũi.
  • Bạn không cần cắt + dán + chỉnh, tạo mã DRY. Tôi đã đề cập điều này trước đây, nhưng nó cũng quan trọng ở đây. Bạn không thể viết mã chất lượng nếu cơ sở mã của bạn là một sự ô nhục.
  • Đừng lạm dụng mảng / sự khác biệt đối tượng, tìm hiểu cách lặp. Tìm hiểu lý do tại sao bạn sử dụng một for (;;)và tại sao bạn sử dụng một for( in )vòng lặp. Khi nào nên sử dụng vòng lặp while. Dừng IF lồng nhau khi bạn chỉ có thể sử dụng trường hợp chuyển đổi. Các đối tượng không bảo toàn trật tự, vì vậy đừng sử dụng chúng như một mảng; Opera / FF cũ, MISE cũ, đôi khi Flash sẽ không tôn trọng thứ tự của các đối tượng của bạn. Sử dụng một mảng nếu bạn muốn giữ một trật tự của sự vật, sử dụng một đối tượng nếu bạn muốn một đối tượng (thứ gì đó không có thứ tự các phần tử).
  • Làm thế nào cấu trúc quyết định có thể được sử dụng để lợi thế của bạn, không thêm phức tạp vào mã của bạn. Dừng IF lồng nhau, tìm hiểu cách các toán tử logic Boolean hoạt động. Chỉ ra cách thức hoạt động của trường hợp chuyển đổi.
  • RTFM. Nơi tốt nhất để tìm hiểu về mã tốt hơn là bằng cách đọc thông số kỹ thuật thực tế. Đọc thông số kỹ thuật RFC trên phần mã bạn đang cố sử dụng. Đọc tài liệu ECMAScript. Đọc thông số W3C DOM. Đọc thông số W3C XHTML / HTML / HTML5. Đọc thông số kỹ thuật, chúng tốt.

Tập trung vào trò chơi dài, không chớp mắt và chết.

  • Bạn nên giúp đỡ cộng đồng, bạn nên viết mã sẽ tồn tại trong một thời gian dài. Có một số niềm đam mê về mã và cộng đồng của bạn. Nếu bạn để lại kiến ​​thức tồi ở đâu đó, hãy quay lại và sửa nó. Thông tin xấu thực sự rất khó để thanh lọc và tồn tại mãi mãi. Làm phần của bạn Đừng giúp w3schools làm cho web tồi tệ hơn.
  • Đừng nhảy vào từ đâu và nói "Này, tôi có một ý tưởng tuyệt vời về cách sử dụng which" thả một loạt mã mà không ai có thể sử dụng và biến mất. Bạn không đóng góp gì. Đừng sử dụng các biến như achezburger.
  • Tìm hiểu để phát hiện mã xấu và mã tốt, tìm mã trong mã của riêng bạn, biến mã xấu của bạn thành mã tốt.
  • Tạo một cái gì đó, học một cái gì đó, dạy một cái gì đó.
  • Mở rộng tầm nhìn của bạn. Bạn không thể chỉ viết JavaScript mãi mãi - hãy nghỉ phép vào một thứ khác mà bạn quan tâm, quay lại, chia sẻ những gì bạn đã học và xem liệu bạn có thể tìm thấy một vị trí cho nó trong cộng đồng không. Cố gắng cho thế giới khác thấy JavaScript có giá trị gì trong khi bạn ở ngoài đó.
  • Bạn vẫn sai, ngay cả khi bạn biết tất cả mọi thứ. Sử dụng một bằng chứng là chính xác, không phải tình trạng / thẩm quyền của bạn. Bạn không bao giờ có thể đúng, nhưng bằng chứng của bạn luôn luôn đúng. Đừng tham gia vào các trận đấu tức giận, đôi khi cũng khó tránh. Có bằng chứng hoặc không có. Ngọn lửa giúp ai.

Đối với bất kỳ ai quan tâm, tôi thực sự đã lấy hầu hết những điều này từ ghi chú cá nhân trong một hướng dẫn mà tôi chưa viết xong .


Câu trả lời của bạn, về phía trên, đã hoàn toàn nhầm lẫn HTTP và HTML.
Bryan Boettcher

@insta Tôi khá có chủ ý khi nói rằng bạn cần hiểu HTTP. Như tôi đã nói, "Một trong những câu hỏi phổ biến nhất mà tôi thấy là" Làm cách nào tôi có thể làm cho JS thay đổi một biến trong mã ASP của mình?! ". Họ không hiểu giao thức mang nội dung HTTP, cookie và tiêu đề từ máy chủ cho khách hàng. Tôi đang cố gắng nói rằng người ta cần biết các lớp để họ không bị nhầm lẫn bởi những điều này. Để diễn đạt chức năng đó, tôi sẽ nói: TCPIP(HTTP(ClientServerRelationship(), Cookies(), HTML(JavaScript(Knowledge))))
Ẩn danh

1
"Bạn có thực sự nhận được HTTP không? Chắc chắn, bạn có thể biết cách các thẻ hoạt động và lồng nhau, nhưng bạn có thực sự hiểu chế độ doctype và quirks không? Bạn có hiểu rằng bạn không nên đặt các thẻ đoạn xung quanh một thành phần danh sách?" Không có gì trong trích dẫn đó liên quan đến giao thức vận chuyển, bên ngoài trường hợp sử dụng sai của nó.
Bryan Boettcher

1
@insta Ah xin lỗi, tôi hoàn toàn không thấy điều đó, tôi đã đổi nó thành HTML. Cảm ơn :).
Ẩn danh

1
+1 Đây là một câu trả lời tốt hơn nhiều so với câu trả lời được chấp nhận
Tom Squires

7
  1. Đọc Javascript của Douglas Crockford : Những phần hay . Đó thực sự là một mẹo, nhưng thành thật mà nói, đó là lời khuyên tốt nhất tôi từng nghe để viết javascript tốt.

  2. Liên quan, đọc các bài viết của Douglas Crockford trên Javascript .


9
Nhưng đừng mang nó theo tôn giáo. Nhìn vào nó và chắc chắn rằng nó có ý nghĩa với bạn. Đặt câu hỏi mà bạn không hiểu mục đích.
Ẩn danh

3
alert('This illustrates how JavaScript has first-class functions');
alert('It also illustrates how to use closures.  Try running this code in your browser.');

var funky = function(s) {
    alert("We're getting funky with " + s);
};

var makeFunkyObject = function(funkyFunction) {
    var numberOfTimesAlerted = 0;
    var fn = { };
    fn.alertFunky = function(s) {
        funkyFunction(s);
        numberOfTimesAlerted++;
    }
    fn.getNumberOfTimesAlerted = function() {
        return numberOfTimesAlerted;
    }
    return fn;
}

var funkyObject = makeFunkyObject(funky);

funkyObject.alertFunky('Alice'); // alerts We're getting funky with Alice
funkyObject.alertFunky('Bob'); // alerts We're getting funky with Bob
alert(funkyObject.getNumberOfTimesAlerted()); // alerts 2

alert('Also, be sure to distinguish between learning about JavaScript and learning about the DOM');
alert('The former is awesome; the latter, not so awesome.');

+1: Một khi bạn mò mẫm điều này, bạn sẽ trở thành một ninja javascript.
Spoike

2

Dưới đây là một số câu hỏi sẽ giúp bạn tiếp tục sử dụng JavaScript.

  1. JSON hoạt động như thế nào và nó tốt cho cái gì?

  2. Tại sao các đối tượng hàm trong Javascript?

  3. Tại sao tôi không nên sử dụng eval?

  4. Làm cách nào để tạo sự kiện trong javascript?

  5. Làm cách nào để tính năng phát hiện trong javascript?

Khá nhiều thứ bao gồm hầu hết những điều bạn cần làm trong Javascript.


1
  1. Luôn luôn sử dụng dấu chấm phẩy. Dấu chấm phẩy tiềm ẩn (trong JS) là một ý tưởng khủng khiếp, đặc biệt là với một số cú pháp thú vị nổi xung quanh trong cách sử dụng phổ biến. Chúng cũng thường được yêu cầu bởi bất kỳ công cụ khai thác JS nào.
  2. Tránh eval () . Điều này gây ra tất cả các loại vấn đề và là một cách rất nhanh để làm chậm ứng dụng của bạn. Hầu hết các sử dụng thực sự là lạm dụng. Mỗi khi bạn nghĩ rằng bạn cần sử dụng eval(), hãy kiểm tra gấp đôi và gấp ba cho một cách khác; hầu như luôn luôn là một cách dễ dàng hơn, dễ dàng hơn trừ khi bạn thực sự đang cố gắng thực thi toàn bộ chuỗi giá trị JavaScript.
  3. (function() {/* stuff */})()là một cách tốt để bao bọc một bộ mã và tạo một phạm vi cục bộ cho nó. Sử dụng các đối tượng là một cách khác, thường là tốt hơn, cách; các đối tượng tương tự như không gian tên trong các ngôn ngữ khác khi được sử dụng theo cách này. Chỉ cần coi chừng this. Không giống như hầu hết các ngôn ngữ khác, thiskhông phải lúc nào cũng tham khảo những gì bạn có thể nghĩ theo trực giác. Cũng nên nhớ rằng trừ trường hợp quy định tất cả các biến JS, chức năng và các đối tượng khác là tất cả toàn cầu, thậm chí trên nhiều .jstập tin.
  4. Tìm và học / sử dụng một thư viện JS tốt. jQuery là một trong những cái phổ biến hơn. Những thứ này sẽ giúp ích rất nhiều cho bạn, bao gồm cả những việc như phát hiện tính năng và trừu tượng hóa thao tác DOM và nhiều cách khác nhau đã được thực hiện trong các trình duyệt khác nhau.
  5. Luôn luôn sử dụng dấu chấm phẩy. Nghiêm túc. Nhận một IDE cảnh báo bạn khi bạn quên chúng. Tôi không muốn phát ra âm thanh giận dữ, nhưng đã có một vài lần các lỗi được đưa ra chỉ vì thiếu dấu chấm phẩy và trình duyệt sẽ không cảnh báo bạn về những điều này.

Bạn không phải lúc nào cũng cần dấu chấm phẩy, tuy nhiên tôi sẽ đồng ý rằng đó là cách thực hành tốt.
rlemon

1
Các quy tắc ASI giống nhau trong tất cả các công cụ JS, do đó mã của bạn ở một nơi sẽ hoạt động giống nhau ở một nơi khác. Thật tuyệt khi thấy dấu chấm phẩy ở tất cả các vị trí phù hợp nhưng có lẽ nó sẽ không giết bạn như những vấn đề khác. Điều đó đang được nói, bạn nên cẩn thận với ASI, làm những việc như returnvà dòng tiếp theo chứa dữ liệu của bạn, bạn sẽ thực sự nói return ;do ASI. Tôi muốn nói rằng việc hiểu ASI và các quy tắc khoảng trắng quan trọng hơn là "luôn luôn sử dụng dấu chấm phẩy". Nhưng đó là một cách tuyệt vời để tự cứu mình.
Ẩn danh

+1 để tránh eval, -1 cho hoang tưởng dấu chấm phẩy. Chèn dấu chấm phẩy của JavaScript có các quy tắc cụ thể, khi được tuân theo, rất logic. Hãy xem thử
Ryan Kinal

@Incognito +1I'd say it's more important to understand ASI and whitespace rules than it is "always use semicolons."
rlemon

Đối với tất cả những người nói rằng bạn không luôn cần dấu chấm phẩy; hãy quay lại với chúng tôi khi bạn đã thực hiện phát triển trình duyệt chéo thực tế trong javascript (xem IE6, 7 và 8).
Spoike

0

Tôi tin rằng các lớp là một công cụ khá mạnh mẽ để cấu trúc mã. Có rất nhiều quy tắc bất khả tri về ngôn ngữ về cách thiết kế các hệ thống dựa trên lớp và một số nguyên tắc OO thực sự được thực hiện rõ ràng hơn khi sử dụng các lớp.
Vì vậy, tôi khuyên bạn nên xem CoffeeScript .

Từ đó, tôi khuyên bạn chỉ nên cố gắng thu thập thông tin về cách triển khai RẮN , DRY , GRASP , KISSYAGNI , và quan trọng hơn là làm thế nào để giải quyết các tình huống, nơi chúng dường như xung đột (chúng không bao giờ làm, chỉ là sự hiểu biết của bạn về chúng hoặc vấn đề trong tầm tay nào). Nó khá dễ tìm, ngay cả trên stackexchange.

Xin lưu ý rằng các nguyên tắc này áp dụng cho phát triển JavaScript "thô" cũng nhiều như vậy. Tuy nhiên, rất nhiều nội dung bạn sẽ tìm thấy trên chúng sẽ minh họa chúng bằng các ngôn ngữ dựa trên lớp và do đó nó có thể được sử dụng để lập trình bằng ngôn ngữ, nơi không có quá nhiều chi phí liên quan đến việc hiểu chúng.
Cá nhân, tôi nghĩ rằng JavaScript là một ngôn ngữ cực kỳ mạnh mẽ, nhưng thực sự trước tiên bạn sẽ phải hiểu sâu sắc các ngôn ngữ khác, để thực sự đánh giá cao sự thật này.


-7

Tôi đang đưa ra giả định rằng bạn đang sử dụng JavaScript để phát triển giao diện người dùng phía máy khách trong một ứng dụng web.

1) Đây có phải là phía máy khách hay đây phải là phía máy chủ? Tôi biết rằng tôi đã đi và viết những đoạn mã nghiêm túc thực sự xứng đáng ở trên máy chủ và ngược lại. Rất nhiều lần tôi sẽ thực hiện một cuộc gọi AJAX cho một cái gì đó cuối cùng được đặt tốt hơn trong mã Máy chủ để được đưa vào trên đường đi. Đặc biệt là những thứ có bản chất tĩnh nhưng thay đổi khá thường xuyên (ví dụ danh sách các danh mục.)

2) Có một plugin đã làm điều này chưa?Tôi sử dụng JQuery rất nhiều và câu trả lời gần như luôn luôn CÓ! Tôi sẽ thường lấy mã plugin mà ai đó đã viết và điều chỉnh nó theo nhu cầu của tôi (thường là thêm các lớp bổ sung vào mọi thứ, v.v.) nhưng hiếm khi tôi cần phải bắt đầu lại từ đầu.

3) Javascript có phải là nơi thích hợp cho việc này không?Thỉnh thoảng tôi sẽ bắt gặp mình thêm cả đống kiểu dáng động vào thứ gì đó thông qua Javascript khi sử dụng CSS thông minh sẽ có ý nghĩa hơn nhiều.

4) Tôi có nên sử dụng một công cụ khác không? Đây là một cái gì đó tôi đã vật lộn với gần đây. Có một số lựa chọn thay thế javascript như kịch bản cà phê được xử lý tốt trong ngăn xếp của tôi (Rails 3.1) và tôi đã xem xét liệu có nên di chuyển nhiều mã của mình đến đó hay không.

5) Mã Javascript này có phải là mã tốt không? Javascript là mã giống như bất kỳ mã nào khác. Mã này có tốt như phần còn lại của mã của tôi không? Nếu không, tai sao không? Có phải là vứt bỏ? Tôi có lười không


4
Mẹo của bạn về cách viết JavaScript tốt bao gồm "Đừng viết JavaScript" và "Viết JavaScript tốt". Xin lỗi, -1
Ryan Kinal

1
@RyanKinal Nó bao gồm "Sử dụng jQuery hầu hết thời gian." Đó là một vấn đề lớn.
Ẩn danh

2
@ f0x Tại sao bạn nói vậy? Tại sao bạn không muốn xây dựng dựa trên công việc mà người khác đã làm?
vẽ

2
@Ryan, câu trả lời của bạn cho "liệt kê năm câu hỏi hoặc ít hơn tôi nên tự hỏi mình" bao gồm ba chỉ thị bắt đầu bằng "học [như vậy và như vậy] ..." đó là lời khuyên tốt nói chung, nhưng thật lòng tôi đã hỏi một điều thực sự cụ thể ở đây: những câu hỏi tôi nên tự hỏi mình cho mỗi lần tôi thực hiện trong khi mã hóa JavaScript. Không phải "tôi nên học gì để hiểu JavaScript." Drew là người duy nhất trả lời câu hỏi khi được hỏi.

2
@ f0x Tôi không nói rằng bạn nên sử dụng plugin một cách mù quáng bất kể nó có hợp lý hay không nhưng tất cả chúng ta đều sử dụng các công cụ mà người khác cung cấp cho chúng tôi, nếu không tất cả chúng ta sẽ sử dụng phiên bản lắp ráp của riêng mình. Các plugin có thể cung cấp cho bạn một điểm tuyệt vời để bắt đầu bằng cách (a) giải quyết vấn đề của bạn hoàn toàn hoặc (b) cung cấp cho bạn một cái nhìn sâu sắc về cách người khác giải quyết vấn đề bạn đang cố gắng giải quyết.
vẽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.