Các quy ước đặt tên JavaScript [đã đóng]


257

Tôi biết có rất nhiều tranh cãi (có thể không phải là tranh cãi, nhưng ít nhất là tranh luận) về quy ước đặt tên nào là tốt nhất cho JavaScript.

Làm thế nào để bạn đặt tên cho các biến, chức năng, đối tượng của bạn và như vậy?

Tôi sẽ để ý nghĩ của mình về điều này, vì tôi đã không làm JS lâu (chỉ vài năm thôi) và tôi vừa nhận được yêu cầu tạo một tài liệu với các quy ước đặt tên được sử dụng trong các dự án của chúng tôi tại nơi làm việc . Vì vậy, tôi đã tìm kiếm (google-ing) xung quanh và có rất nhiều ý kiến ​​khác nhau.

Những cuốn sách tôi đã đọc trên JS cũng sử dụng các quy ước đặt tên khác nhau, nhưng tất cả chúng đều đồng ý về một bit: Tìm Tìm những gì phù hợp với bạn và tuân theo nó. Nhưng bây giờ tôi đã đọc rất nhiều xung quanh, tôi thấy rằng tôi thích một số phương pháp khác tốt hơn một chút so với những gì tôi đã sử dụng cho đến bây giờ.


Hướng dẫn cập nhật về ý nghĩa thông thường Đặt tên cho các quy ước trong JS: robinwieruch.de/javascript-naming-conventions
Robin Wieruch

Câu trả lời:


202

Tôi tuân theo các quy ước mã của Douglas Crockford cho javascript. Tôi cũng sử dụng công cụ JSLint của mình để xác thực theo các quy ước đó.


30
JSLint có thể quá triệt để và hạn chế đối với nhiều nhà phát triển, sau đó, JSHint có thể là lựa chọn tốt hơn.
Pavel Hodek

7
Crockford không đi sâu vào mức độ chi tiết này, nhưng còn các biến xảy ra bắt đầu bằng chữ in hoa, bởi vì chúng đề cập đến một từ viết tắt - nên viết tắt chữ cái đầu tiên hoặc toàn bộ từ viết tắt? Ví dụ: ECBhandleso với ecbHandle(nó không có vấn đề gì có nghĩa là ECB).
Dan Dascalescu

13
Mặc dù đó là một liên kết tốt, tôi không thể tin rằng "câu trả lời liên kết" có nhiều phiếu như vậy. Bạn ít nhất có thể trích xuất & định dạng các phần có liên quan của trang được liên kết.
Adrien Be

2
Tôi nghĩ rằng anh ấy đang làm tốt với các liên kết. Nếu bạn quan tâm bạn nên chỉnh sửa bài viết.
nckbrz

4
Tôi thực sự trông chờ vào Crockford nhưng các quy ước về mã của anh ấy có vẻ rất lỗi thời. Tôi sẽ tư vấn xem @PavelHodek trả lời thêm trong danh sách
Per Hornshøj-Schierbeck

160

Như Geoff nói, những gì Crockford nói là tốt.

Ngoại lệ duy nhất tôi theo dõi (và đã thấy được sử dụng rộng rãi) là sử dụng $ varname để chỉ ra một đối tượng jQuery (hoặc bất kỳ thư viện nào). Ví dụ

var footer = document.getElementById('footer');

var $footer = $('#footer');


7
Tôi sử dụng $ cho điều này là tốt. Tôi thường thấy mọi người sử dụng $ để chỉ ra một bản sao được lưu trong bộ nhớ cache của một đối tượng. Tôi luôn cho rằng đó là cách chơi chữ. bộ nhớ cache> "tiền mặt"> $
Shawn Whinnery

1
Đây có thể không phải là ý tưởng tốt nhất nếu bạn đang sử dụng AngularJS - các dịch vụ cốt lõi có tiền tố là '$'
Filip Sobczak

2
Tôi đặc biệt khuyên bạn KHÔNG nên sử dụng các ký tự đặc biệt trong tên biến. Rất nhiều khung sử dụng $ đặc biệt.
nckbrz

1
@nixxbb Điều đó tốt nếu bạn xác định đúng các biến phạm vi - điều mà các khung công tác tốt cũng làm.
Andre Figueiredo

1
Tôi thấy các bang hội của Crockford có đề cập "Không sử dụng _ underbar làm ký tự đầu tiên hoặc cuối cùng của tên. Đôi khi nó được dùng để chỉ sự riêng tư". Cá nhân tôi sử dụng underbar để chỉ các thành viên tư nhân. Đây có phải là thực hành xấu? Có một sự thay thế?
Ian G

112

Bạn có thể làm theo Hướng dẫn về Phong cách Google JavaScript này

Nói chung, hãy sử dụng hàmNamesLike This, biếnNamesLike This, ClassNamesLike This, EnumNamesLike This, methodNamesLike This và SYMBOLIC_CONSTANTS_LIKE_THIS.

EDIT: Xem bộ sưu tập đẹp về Hướng dẫn và làm đẹp JavaScript .


15
Tôi không chắc chắn nếu tôi hoàn toàn đồng ý với điều đó, vì họ đã phát triển Dart và GWT (tiện ích mở rộng chrome javascript cũng rất giống java). Đối với một số nhóm trong Google, cách tốt nhất để phát triển javascript có thể là viết nó bằng một số ngôn ngữ khác.
badunk

2
Tôi luôn thấy quy ước đặt tên riêng của Google là kỳ lạ , thay vì _fooBarhọ làm như vậy fooBar_- Microsoft đã hiểu đúng: asp.net/ajaxl Library / act_contribution_codingStiterias.ashx
Daniel Sokolowski

3
@DanielSokolowski Còn khi sử dụng intellisense thì sao? Nếu bạn thêm tiền tố vào một số lượng lớn các biến có dấu gạch dưới, thì đó chỉ là một ký tự khác mà bạn phải nhập mỗi khi bạn truy cập các biến đó. Cuối cùng, danh sách intellisense của bạn trông gọn gàng hơn và chỉ cần nhanh hơn một chút để tìm thấy những gì bạn cần.
FreeAsInBeer

@FreeAsInBeer đúng về nhân vật phụ nhưng tôi không nghĩ nó nhanh hơn. Gõ _khi tham chiếu các vars tư nhân sẽ dẫn đến intellisense ngay lập tức giới hạn kết quả; cuối cùng nghĩ rằng đó là sở thích cá nhân.
Daniel Sokolowski

1
Cảm ơn đã liên kết đến danh sách hướng dẫn phong cách. Tôi không biết liệu có đáng để theo dõi riêng hay làm thế nào để quyết định xem cái nào hay tôi nên sử dụng hỗn hợp. Nhưng biết nơi để tìm một vài trong một nơi là một lợi ích thực sự.
Roger_S

9

Một quy ước tôi muốn thử là đặt tên các mô-đun tĩnh với tiền tố 'the'. Kiểm tra này. Khi tôi sử dụng mô-đun của người khác, không dễ để thấy tôi nên sử dụng mô-đun như thế nào. ví dụ:

define(['Lightbox'],function(Lightbox) {
  var myLightbox = new Lightbox() // not sure whether this is a constructor (non-static) or not
  myLightbox.show('hello')
})

Tôi đang suy nghĩ về việc thử một quy ước trong đó các mô-đun tĩnh sử dụng 'the' để biểu thị tính phổ biến của chúng. Có ai nhìn thấy một cách tốt hơn thế này? Sẽ như thế này:

define(['theLightbox'],function(theLightbox) {
  theLightbox.show('hello') // since I recognize the 'the' convention, I know it's static
})

6

Tôi nghĩ rằng bên cạnh một số hạn chế cú pháp; các quy ước đặt tên là rất nhiều ngôn ngữ độc lập. Ý tôi là, các đối số có lợi cho c_style_fifts và JavaLikeCamelCase cũng có thể được sử dụng theo cách ngược lại, đó chỉ là người dùng ngôn ngữ có xu hướng theo dõi các tác giả ngôn ngữ.

đã nói rằng, tôi nghĩ rằng hầu hết các thư viện có xu hướng theo cách đơn giản hóa CamelCase của Java. Tôi thấy lời khuyên của Douglas Crockford đủ trang nhã cho tôi.


2

Đó là một câu hỏi cá nhân có thể phụ thuộc vào cách bạn làm việc. Một số người thích đặt loại biến ở đầu biến, như "str_message". Và một số người thích sử dụng dấu gạch dưới giữa các từ của họ ("my_message") trong khi những người khác thích phân tách chúng bằng các chữ cái viết hoa ("myMessage").

Tôi thường làm việc với các thư viện JavaScript lớn với những người khác, vì vậy các hàm và biến (ngoại trừ các biến riêng tư bên trong các hàm) phải bắt đầu bằng tên của dịch vụ để tránh xung đột, như "guestbook_message".

Nói tóm lại: tiếng Anh, tên biến và tên hàm được sắp xếp tốt, được tổ chức tốt là tốt hơn theo tôi. Các tên nên mô tả sự tồn tại của họ chứ không phải là ngắn.


2
"vì vậy các hàm và biến (ngoại trừ các biến riêng bên trong các hàm) phải bắt đầu bằng tên của dịch vụ để tránh xung đột", Câu lệnh này không chính xác . Bạn có thể có các hàm và đối tượng "không gian tên" chính xác mà không bị chảy qua nhiều khung javascript. Có một bài thuyết trình rất hay về cách đạt được điều này từ kênh MIX119.msdn.com/Events/MIX/MIX11/OPN08
Chris
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.