Airbnb JavaScript Style Guide: Quy Ước Viết Code
Airbnb JavaScript Style Guide là tập hợp quy ước viết code JavaScript do Airbnb công bố, kèm một ESLint rule cho gần như mọi quy tắc. Hãy dùng nếu muốn một chuẩn viết code lint tự động được cho const/let, object và array literal, destructuring, xử lý string, thay vì tranh cãi trong từng pull request. Bỏ qua nếu team đã có quy ước riêng, như Standard, và không muốn đổi lại công cụ để khớp bộ quy tắc khác.
Tìm Hiểu Về Airbnb JavaScript Style Guide
Airbnb JavaScript Style Guide là tài liệu công khai tổng hợp quy ước viết code JavaScript, duy trì tại repository GitHub airbnb/javascript, bao quát từ primitive/reference đến object, array, string, và function. Mỗi quy tắc có lý do ngắn gọn cùng ví dụ code sai/đúng, nhiều quy tắc gắn với một ESLint rule cụ thể như prefer-const hay object-shorthand. Hướng dẫn giả định dùng Babel và liên kết tới hướng dẫn đồng hành cho React và CSS-in-JavaScript.
Nguyên Tắc Và Quy Ước Viết Code Chính
- ✓Yêu cầu dùng const cho biến không gán lại và let cho biến có gán lại, cấm hẳn var, dựa trên hai ESLint rule là prefer-const và no-var.
- ✓Quy định let và const có block scope còn var có function scope, kèm ví dụ code cho thấy lỗi ReferenceError xảy ra khi hiểu sai điều này.
- ✓Ưu tiên cú pháp literal thay vì constructor: dùng {} thay cho new Object(), và [] thay cho new Array(), mỗi quy tắc gắn với một ESLint rule riêng.
- ✓Dùng object spread ({ ...original, c: 3 }) thay cho Object.assign khi copy nông một object, vì Object.assign trên object có sẵn sẽ làm thay đổi (mutate) chính object đó.
- ✓Yêu cầu destructuring object khi truy cập nhiều property cùng lúc và khi trả về nhiều giá trị từ function, dựa trên ESLint rule prefer-destructuring.
- ✓Chuyển iterable thành array bằng spread (...foo), nhưng chuyển sang Array.from(foo, bar) khi cần map, để tránh tạo ra một array trung gian.
- ✓Chuẩn hóa dùng single quote cho string và template literal khi ghép chuỗi, đồng thời cấm hẳn eval().
- ✓Yêu cầu dùng named function expression thay vì function ẩn danh hay function declaration, và bọc IIFE trong dấu ngoặc theo rule wrap-iife.
Ai Được Lợi Từ Hướng Dẫn Này?
Airbnb JavaScript Style Guide phù hợp với team đã dùng Babel và ESLint, muốn có một chuẩn viết code rõ ràng theo từng quy tắc thay vì tự soạn từ đầu. Riêng phần const/let/var đã giải quyết một tranh cãi mà nhiều team vẫn xử lý theo kiểu không chính thức. Nó ít phù hợp hơn cho dự án cá nhân hay team đã hài lòng với cấu hình linter hiện tại, vì áp dụng nó nghĩa là phải đối chiếu lại từng quy tắc đang dùng với lựa chọn riêng của Airbnb.
Điểm Mạnh
- ✓Gần như mọi quy tắc đều nêu đúng tên ESLint rule thực thi nó: prefer-const, no-array-constructor, prefer-object-spread, quotes, no-eval. Nhờ vậy có thể gắn vào CI, không chỉ là tài liệu để đọc rồi quên.
- ✓Mỗi quy tắc trình bày code sai, code đúng, và đôi khi cả bản tốt nhất, thay vì chỉ mô tả bằng lời.
- ✓Phần lớn quy tắc có mục 'Why?' giải thích ngắn gọn lý do, ví dụ vì sao destructuring tốt hơn truy cập property lặp lại.
- ✓Các hướng dẫn đồng hành cho React và CSS-in-JavaScript mở rộng cùng bộ quy ước sang các phần khác của một stack frontend thông thường.
- ✓Giấy phép MIT nên việc copy quy tắc hay cả tài liệu vào sổ tay nội bộ của team không vướng vấn đề bản quyền.
Lưu Ý Và Yêu Cầu Cần Biết
- △Hướng dẫn giả định dự án build bằng Babel (babel-preset-airbnb hoặc tương đương) cùng các package shim/polyfill, nên không phải tài liệu dùng ngay được cho một dự án chưa có pipeline build đó.
- △Mục lục của hướng dẫn trải dài thêm vài chục phần chưa được đề cập ở đây (Classes, Modules, Naming Conventions, Comments, và nhiều phần khác), nên áp dụng toàn bộ là một khối lượng công việc lớn hơn nhiều so với riêng các quy tắc về object/array/string.
- △Đây là style riêng của Airbnb, không phải một chuẩn trung lập, nên team đã quen với một quy ước khác sẽ phải viết lại code khi chuyển sang.
- △Không có số phiên bản hay ngày cập nhật nào xuất hiện trong dữ kiện có ở đây, nên không thể biết một phần cụ thể còn mới hay đã cũ chỉ từ metadata của repo.
- △Cài đặt và cách dùng hàng ngày không được trình bày thành một mục hướng dẫn bắt đầu riêng. README hoạt động như tài liệu tra cứu theo từng quy tắc, không phải bài hướng dẫn áp dụng toàn bộ từ đầu đến cuối.
Các Hướng Dẫn Phong Cách JavaScript Phổ Biến Khác
Câu Hỏi Thường Gặp
Airbnb JavaScript Style Guide nhắm tới ECMAScript hiện đại, thể hiện qua các topic của repo như es2015 đến es2018, es6, và tc39, còn các quy tắc của nó giả định code được build qua Babel thay vì chạy ES5 thuần.
README của Airbnb JavaScript Style Guide nói rõ nó giả định dùng Babel và yêu cầu babel-preset-airbnb (hoặc tương đương) cùng shim từ airbnb-browser-shims, còn phần lớn quy tắc đều gắn với một ESLint rule cụ thể để thực thi.
Repository của Airbnb JavaScript Style Guide có một hướng dẫn React đi kèm nằm trong mục Other Style Guides (react/), nhằm mở rộng cùng bộ quy ước sang code React.
Airbnb JavaScript Style Guide phát hành theo giấy phép MIT, theo thông tin giấy phép của repository airbnb/javascript.
README của Airbnb JavaScript Style Guide nói hướng dẫn này có ở nhiều ngôn ngữ khác và trỏ tới một mục Translation riêng, dù danh sách ngôn ngữ cụ thể không được nêu chi tiết trong phần nội dung được cung cấp ở đây.
Airbnb JavaScript Style Guide ưu tiên const và let có block scope thay vì var, cú pháp literal thay vì constructor như new Object() hay new Array(), destructuring thay vì truy cập property lặp lại, và named function expression thay vì function ẩn danh, đồng thời gắn phần lớn quy tắc với một ESLint rule cụ thể.
Trường Hợp Sử Dụng Tốt Nhất
- •Khởi tạo cấu hình ESLint cho một team mới bằng cách áp dụng các rule có tên sẵn của Airbnb (prefer-const, no-var, object-shorthand, quotes) làm bộ quy tắc nền.
- •Chấm dứt tranh cãi lặp đi lặp lại trong code review về const/let/var, kiểu quote, hay Object.assign so với spread, bằng cách trỏ tới một quy tắc đã viết ra rõ ràng.
- •Dạy một developer mới làm quen với cú pháp ES6+ bằng các cặp ví dụ code sai/đúng của hướng dẫn cho destructuring, template literal, và spread.
- •Mở rộng cùng bộ quy ước sang codebase React thông qua hướng dẫn React đi kèm mà repo liên kết tới trong mục Other Style Guides.
- •Rà soát cách một codebase JavaScript hiện có đang xử lý object, array, và string, đối chiếu với một tài liệu tham khảo bên ngoài thay vì kinh nghiệm truyền miệng trong team.
Repo liên quan
Vẫn đang phân vân về javascript?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về javascript.
