Hướng dẫn horizontal space in javascript - không gian ngang trong javascript

0

Show

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi tự động tạo các nút gửi bằng JavaScript. Tôi muốn biết cách giới thiệu khoảng cách ngang giữa mọi nút khác trong quá trình.

Mã của tôi là

var allFields = commonButtons.concat(extraFields);
for (var i = 0; i < allFields.length; i++) {
    var node = document.createElement("input");
    var btName = document.getElementById("submit-buttons");
    node.setAttribute('data-value', allFields[i]);
    node.setAttribute('class', "submitButton");
    node.setAttribute('type', "submit");
    node.setAttribute('id', "test");
    node.setAttribute('name', "");
    node.setAttribute('value', allFields[i]);
    var parent = document.getElementById('submit-buttons');
    parent.insertBefore(node, parent.childNodes[parent.childNodes.length - 2]);
}

Làm thế nào để tôi làm điều này?

Hướng dẫn horizontal space in javascript - không gian ngang trong javascript

Tushar

83.9K21 Huy hiệu vàng154 Huy hiệu bạc173 Huy hiệu đồng21 gold badges154 silver badges173 bronze badges

Đã hỏi ngày 22 tháng 6 năm 2015 lúc 9:59Jun 22, 2015 at 9:59

Hướng dẫn horizontal space in javascript - không gian ngang trong javascript

1

Sử dụng CSS thay vì JavaScript. Dù sao, bạn đang thêm một lớp vào tất cả các nút. Sử dụng mã sau:

.submitButton {
    margin: 0 10px;
}

Đã trả lời ngày 22 tháng 6 năm 2015 lúc 10:01Jun 22, 2015 at 10:01

Hướng dẫn horizontal space in javascript - không gian ngang trong javascript

TushartusharTushar

83.9K21 Huy hiệu vàng154 Huy hiệu bạc173 Huy hiệu đồng21 gold badges154 silver badges173 bronze badges

2

Đã hỏi ngày 22 tháng 6 năm 2015 lúc 9:59

.submitButton {
    margin: 0 10px;
}
50

Sử dụng CSS thay vì JavaScript. Dù sao, bạn đang thêm một lớp vào tất cả các nút. Sử dụng mã sau:

Đã trả lời ngày 22 tháng 6 năm 2015 lúc 10:01Jun 22, 2015 at 10:12

1. Giới thiệu

Tài liệu này đóng vai trò là định nghĩa đầy đủ về các tiêu chuẩn mã hóa Google Google cho mã nguồn trong ngôn ngữ lập trình JavaScript. Một tệp nguồn JavaScript được mô tả là theo kiểu Google khi và chỉ khi nó tuân thủ các quy tắc trong tài liệu này.complete definition of Google’s coding standards for source code in the JavaScript programming language. A JavaScript source file is described as being in Google Style if and only if it adheres to the rules herein.

Giống như các hướng dẫn phong cách lập trình khác, các vấn đề bao gồm khoảng thời gian không chỉ các vấn đề thẩm mỹ của định dạng, mà cả các loại quy ước hoặc tiêu chuẩn mã hóa khác. Tuy nhiên, tài liệu này tập trung chủ yếu vào các quy tắc khó và nhanh mà chúng tôi tuân theo phổ biến và tránh đưa ra lời khuyên không thể thực thi rõ ràng (dù là con người hay công cụ).

1.1 Ghi chú thuật ngữ

Trong tài liệu này, trừ khi có được làm rõ khác:

  1. Thuật ngữ bình luận luôn đề cập đến ý kiến ​​thực hiện. Chúng tôi không sử dụng các nhận xét tài liệu cụm từ, thay vào đó sử dụng thuật ngữ phổ biến là JSDOC, cho cả hai chú thích văn bản và có thể đọc được bằng máy trong

    .submitButton {
        margin: 0 10px;
    }
    
    51.

  2. Hướng dẫn kiểu này sử dụng thuật ngữ RFC 2119 khi sử dụng các cụm từ phải, không nên, không nên, và có thể. Các thuật ngữ thích và tránh tương ứng với nên và không nên, tương ứng. Các tuyên bố bắt buộc và khai báo là quy định và tương ứng với phải.

Các ghi chú thuật ngữ khác sẽ thỉnh thoảng xuất hiện trong suốt tài liệu.

1.2 Ghi chú hướng dẫn

Mã ví dụ trong tài liệu này là không quy phạm. Đó là, trong khi các ví dụ theo kiểu Google, chúng có thể không minh họa cách duy nhất phong cách để đại diện cho mã. Các lựa chọn định dạng tùy chọn được thực hiện trong các ví dụ không được thực thi như các quy tắc.non-normative. That is, while the examples are in Google Style, they may not illustrate the only stylish way to represent the code. Optional formatting choices made in examples must not be enforced as rules.

2 Khái niệm cơ bản về tệp nguồn

2.1 Tên tệp

Tên tệp phải là tất cả các chữ thường và có thể bao gồm dấu gạch dưới (

.submitButton {
    margin: 0 10px;
}
52) hoặc dấu gạch ngang (
.submitButton {
    margin: 0 10px;
}
53), nhưng không có dấu chấm câu bổ sung. Thực hiện theo quy ước mà dự án của bạn sử dụng. Tiện ích mở rộng của FileNames phải là
.submitButton {
    margin: 0 10px;
}
54.

2.2 Mã hóa tệp: UTF-8

Các tập tin nguồn được mã hóa trong UTF-8.UTF-8.

2.3 ký tự đặc biệt

2.3.1 ký tự khoảng trắng

Ngoài trình tự kết thúc dòng, ký tự không gian ngang ASCII (0x20) là ký tự khoảng trắng duy nhất xuất hiện ở bất cứ đâu trong tệp nguồn. Điều này ngụ ý rằng

  1. Tất cả các ký tự khoảng trắng khác trong chuỗi chữ được thoát ra, và

  2. Các ký tự tab không được sử dụng để thụt lề.not used for indentation.

2.3.2 Trình tự thoát đặc biệt

Đối với bất kỳ ký tự nào có trình tự thoát đặc biệt (

.submitButton {
    margin: 0 10px;
}
55,
.submitButton {
    margin: 0 10px;
}
56,
.submitButton {
    margin: 0 10px;
}
57,
.submitButton {
    margin: 0 10px;
}
58,
.submitButton {
    margin: 0 10px;
}
59,
.submitButton {
    margin: 0 10px;
}
60,
.submitButton {
    margin: 0 10px;
}
61,
.submitButton {
    margin: 0 10px;
}
62,
.submitButton {
    margin: 0 10px;
}
63) Legacy Octal Escapes không bao giờ được sử dụng.

2.3.3 Các ký tự không phải ASCII

Đối với các ký tự không phải ASCII còn lại, ký tự unicode thực tế (ví dụ:

.submitButton {
    margin: 0 10px;
}
67) hoặc thoát Hex hoặc unicode tương đương (ví dụ:
.submitButton {
    margin: 0 10px;
}
68) được sử dụng, chỉ tùy thuộc vào đó làm cho mã dễ đọc và hiểu hơn.easier to read and understand.

Mẹo: Trong trường hợp Escape Escape, và đôi khi ngay cả khi các ký tự Unicode thực tế được sử dụng, một nhận xét giải thích có thể rất hữu ích.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';

Mẹo: Không bao giờ làm cho mã của bạn không thể đọc được chỉ đơn giản là vì sợ rằng một số chương trình có thể không xử lý các ký tự không phải ASCII đúng cách. Nếu điều đó xảy ra, những chương trình đó bị phá vỡ và chúng phải được sửa.broken and they must be fixed.

3 cấu trúc tệp nguồn

Tất cả các tệp nguồn mới phải là tệp

.submitButton {
    margin: 0 10px;
}
69 (một tệp chứa cuộc gọi
.submitButton {
    margin: 0 10px;
}
69) hoặc mô -đun ECMAScript (ES) (sử dụng các câu lệnh
.submitButton {
    margin: 0 10px;
}
71 và
.submitButton {
    margin: 0 10px;
}
72). Các tệp bao gồm các tệp sau, theo thứ tự:in order:

  1. Giấy phép hoặc thông tin bản quyền, nếu có mặt
  2. .submitButton {
        margin: 0 10px;
    }
    
    73 JSDOC, nếu có mặt
  3. Tuyên bố
    .submitButton {
        margin: 0 10px;
    }
    
    69, nếu tệp
    .submitButton {
        margin: 0 10px;
    }
    
    69
  4. Các câu lệnh
    .submitButton {
        margin: 0 10px;
    }
    
    71, nếu một mô -đun ES
  5. .submitButton {
        margin: 0 10px;
    }
    
    77 và
    .submitButton {
        margin: 0 10px;
    }
    
    78
  6. Việc triển khai tập tin

Chính xác một dòng trống phân tách mỗi phần có mặt, ngoại trừ việc triển khai của tệp, có thể đi trước 1 hoặc 2 dòng trống. separates each section that is present, except the file's implementation, which may be preceded by 1 or 2 blank lines.

3.1 giấy phép hoặc thông tin bản quyền, nếu có mặt

Nếu giấy phép hoặc thông tin bản quyền thuộc về một tệp, nó thuộc về đây.

3.2 .submitButton { margin: 0 10px; } 73 JSDOC, nếu có mặt

Nhìn thấy ?? cho các quy tắc định dạng.

3.3 .submitButton { margin: 0 10px; } 69 Tuyên bố

Tất cả các tệp

.submitButton {
    margin: 0 10px;
}
69 phải khai báo chính xác một tên
.submitButton {
    margin: 0 10px;
}
69 trên một dòng duy nhất: các dòng chứa khai báo
.submitButton {
    margin: 0 10px;
}
69 không được gói và do đó là một ngoại lệ đối với giới hạn 80 cột.

Toàn bộ đối số với goog.module là những gì xác định một không gian tên. Đó là tên gói (một định danh phản ánh đoạn của cấu trúc thư mục nơi mã sống) cộng với, tùy chọn, lớp chính/enum/giao diện mà nó xác định được liên kết đến cuối.

Thí dụ

goog.module('search.urlHistory.UrlHistoryService');

3.3.1 Phân cấp

Không gian tên mô -đun có thể không bao giờ được đặt tên là con trực tiếp của không gian tên mô -đun khác.

Disallowed:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');

Hệ thống phân cấp thư mục phản ánh hệ thống phân cấp không gian tên, do đó trẻ em được nuôi sâu hơn là các thư mục con của các thư mục phụ huynh cấp cao hơn. Lưu ý rằng điều này ngụ ý rằng chủ sở hữu của các nhóm không gian tên cha mẹ của cha mẹ nhất thiết phải nhận thức được tất cả các không gian tên trẻ em, vì chúng tồn tại trong cùng một thư mục.

3.3.2
.submitButton {
    margin: 0 10px;
}
84

Câu lệnh

.submitButton {
    margin: 0 10px;
}
69 có thể tùy ý được theo sau bởi một cuộc gọi đến
.submitButton {
    margin: 0 10px;
}
86. Tránh
.submitButton {
    margin: 0 10px;
}
87 khi có thể.

Example:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();

.submitButton {
    margin: 0 10px;
}
84 tồn tại để dễ dàng chuyển đổi từ các không gian tên dựa trên phân cấp đối tượng truyền thống nhưng đi kèm với một số hạn chế đặt tên. Vì tên mô -đun con phải được tạo theo không gian tên cha, tên này không phải là con hoặc cha mẹ của bất kỳ
.submitButton {
    margin: 0 10px;
}
69 nào khác (ví dụ,
.submitButton {
    margin: 0 10px;
}
90 và
.submitButton {
    margin: 0 10px;
}
91 không thể tồn tại an toàn, cũng không thể
.submitButton {
    margin: 0 10px;
}
90 và
.submitButton {
    margin: 0 10px;
}
93).must not be a child or parent of any other
.submitButton {
    margin: 0 10px;
}
69 (for example,
.submitButton {
    margin: 0 10px;
}
90 and
.submitButton {
    margin: 0 10px;
}
91 cannot both exist safely, nor can
.submitButton {
    margin: 0 10px;
}
90 and
.submitButton {
    margin: 0 10px;
}
93).

3.3.3 .submitButton { margin: 0 10px; } 69 Xuất khẩu

Các lớp, enum, chức năng, hằng số và các ký hiệu khác được xuất bằng đối tượng

.submitButton {
    margin: 0 10px;
}
95. Các ký hiệu được xuất có thể được xác định trực tiếp trên đối tượng
.submitButton {
    margin: 0 10px;
}
95, hoặc nếu không được khai báo cục bộ và xuất khẩu riêng biệt. Các biểu tượng chỉ được xuất nếu chúng được sử dụng bên ngoài mô -đun. Các ký hiệu mô-đun không được xuất chưa được khai báo
.submitButton {
    margin: 0 10px;
}
97 cũng như tên của chúng kết thúc bằng một dấu gạch dưới. Không có đơn đặt hàng theo quy định cho các ký hiệu xuất khẩu và mô-đun-local.

Examples:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';

Không chú thích đối tượng

.submitButton {
    margin: 0 10px;
}
95 là
.submitButton {
    margin: 0 10px;
}
99 vì nó đã được coi là một hằng số bởi trình biên dịch.

/** @const */
exports = {exportedFunction};

3.4 Mô -đun ES

3.4.1 Nhập khẩu

Báo cáo nhập không được bao bọc và do đó là một ngoại lệ đối với giới hạn 80 cột.

3.4.1.1 Đường dẫn nhập

Các tệp mô -đun ES phải sử dụng câu lệnh

.submitButton {
    margin: 0 10px;
}
71 để nhập các tệp mô -đun ES khác. Không
.submitButton {
    margin: 0 10px;
}
77 Một mô -đun ES khác.

________ 103.4.1.1.1 Tiện ích mở rộng tệp trong đường dẫn nhập

Tiện ích mở rộng tệp

.submitButton {
    margin: 0 10px;
}
54 không phải là tùy chọn trong các đường dẫn nhập và phải luôn luôn được đưa vào.

.submitButton {
    margin: 0 10px;
}
1
.submitButton {
    margin: 0 10px;
}
2
3.4.1.2 Nhập cùng một tệp nhiều lần

Không nhập cùng một tệp nhiều lần. Điều này có thể làm cho nó khó xác định nhập khẩu tổng hợp của một tệp.

.submitButton {
    margin: 0 10px;
}
3
3.4.1.3 Đặt tên nhập khẩu
3.4.1.3.1 Nhập mô -đun đặt tên

Tên nhập mô -đun (

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
03) là các tên
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04 có nguồn gốc từ tên tệp đã nhập.

________ 14 ________ 153.4.1.3.2 Đặt tên nhập khẩu mặc định

Tên nhập mặc định được lấy từ tên tệp đã nhập và tuân theo các quy tắc trong ??.

.submitButton {
    margin: 0 10px;
}
6

Lưu ý: Nói chung điều này không nên xảy ra khi xuất khẩu mặc định bị cấm bởi hướng dẫn kiểu này, xem ??. Nhập mặc định chỉ được sử dụng để nhập các mô -đun không phù hợp với hướng dẫn kiểu này.

3.4.1.3.3 Đặt tên nhập khẩu được đặt tên

Trong các ký hiệu chung được nhập thông qua nhập được đặt tên (

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
05) sẽ giữ cùng tên. Tránh nhập khẩu bí danh (
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
06). Thích sửa lỗi va chạm tên bằng cách sử dụng nhập mô -đun (
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
07) hoặc tự đổi tên cho chính xuất khẩu.

.submitButton {
    margin: 0 10px;
}
7

Nếu cần đổi tên một lần nhập được đặt tên thì hãy sử dụng các thành phần của tên hoặc đường dẫn tệp của mô -đun đã nhập trong bí danh kết quả.

.submitButton {
    margin: 0 10px;
}
8

3.4.2 Xuất khẩu

Các biểu tượng chỉ được xuất nếu chúng được sử dụng bên ngoài mô -đun. Các ký hiệu mô-đun không được xuất chưa được khai báo

.submitButton {
    margin: 0 10px;
}
97 cũng như tên của chúng kết thúc bằng một dấu gạch dưới. Không có đơn đặt hàng theo quy định cho các ký hiệu xuất khẩu và mô-đun-local.

3.4.2.1 Được đặt tên VS xuất khẩu mặc định

Sử dụng xuất khẩu được đặt tên trong tất cả các mã. Bạn có thể áp dụng từ khóa

.submitButton {
    margin: 0 10px;
}
72 vào khai báo hoặc sử dụng cú pháp
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
10.

Không sử dụng xuất khẩu mặc định. Nhập các mô -đun phải đặt tên cho các giá trị này, điều này có thể dẫn đến sự không nhất quán trong việc đặt tên trên các mô -đun.

.submitButton {
    margin: 0 10px;
}
9
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
0
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
1
3.4.2.2 Xuất các lớp và đối tượng container tĩnh

Không xuất các lớp container hoặc đối tượng bằng các phương thức hoặc thuộc tính tĩnh vì mục đích đặt tên.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
2

Thay vào đó, xuất các hằng số và chức năng riêng lẻ:

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
3
3.4.2.3 Khả năng đột biến của xuất khẩu

Các biến được xuất không được đột biến bên ngoài khởi tạo mô -đun.

Có những lựa chọn thay thế nếu cần đột biến, bao gồm xuất một tham chiếu không đổi vào một đối tượng có các trường có thể thay đổi hoặc xuất các chức năng truy cập cho dữ liệu có thể thay đổi.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
4
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
5
3.4.2.4 Xuất từ

Các câu lệnh

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
11 không được bao bọc và do đó là một ngoại lệ đối với giới hạn 80 cột. Điều này áp dụng cho cả hai hương vị
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
11.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
6

3.4.3 Các phụ thuộc tròn trong các mô -đun ES

Không tạo chu kỳ giữa các mô -đun ES, mặc dù đặc điểm kỹ thuật ECMAScript cho phép điều này. Lưu ý rằng có thể tạo các chu kỳ với cả các câu lệnh

.submitButton {
    margin: 0 10px;
}
71 và
.submitButton {
    margin: 0 10px;
}
72.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
7
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
8
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
9

3.4.4 Tương tác với đóng cửa

3.4.4.1 Tham khảo Goog

Để tham khảo không gian tên đóng

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
15, nhập
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
16 của đóng.

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
0

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
16 chỉ xuất một tập hợp các thuộc tính từ toàn cầu
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
15 có thể được sử dụng trong các mô -đun ES.

3.4.4.2 Goog.Require trong các mô -đun ES

.submitButton {
    margin: 0 10px;
}
77 trong các mô -đun ES hoạt động như trong các tệp
.submitButton {
    margin: 0 10px;
}
69. Bạn có thể yêu cầu bất kỳ ký hiệu không gian tên đóng nào (nghĩa là các ký hiệu được tạo bởi
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 hoặc
.submitButton {
    margin: 0 10px;
}
69) và
.submitButton {
    margin: 0 10px;
}
77 sẽ trả về giá trị.

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
1
3.4.4.3 Khai báo ID mô -đun đóng trong các mô -đun ES

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
24 có thể được sử dụng trong các mô-đun ES để khai báo ID mô-đun giống như ____ 169. Điều này có nghĩa là ID mô -đun này có thể là
.submitButton {
    margin: 0 10px;
}
77D,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
27D, ________ 228'd, v.v. Như thể đó là một
.submitButton {
    margin: 0 10px;
}
69 không gọi
.submitButton {
    margin: 0 10px;
}
84. Nó không tạo ID mô -đun dưới dạng biểu tượng JavaScript có sẵn trên toàn cầu.

A Do đó, đối số của

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
24 phải luôn kết thúc bằng một
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
36.

Lưu ý: Đó là một lỗi khi gọi

.submitButton {
    margin: 0 10px;
}
84 trong một mô -đun ES, nó chỉ có thể được gọi từ các tệp
.submitButton {
    margin: 0 10px;
}
69. Không có cách trực tiếp để liên kết một không gian tên di sản với một mô -đun ES.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
24 chỉ nên được sử dụng để nâng cấp các tệp đóng lên các mô -đun ES tại chỗ, nơi sử dụng xuất khẩu được đặt tên.

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
2

3.5 /* Best: perfectly clear even without a comment. */ const units = 'μs'; /* Allowed: but unnecessary as μ is a printable character. */ const units = '\u03bcs'; // 'μs' /* Good: use escapes for non-printable characters with a comment for clarity. */ return '\ufeff' + content; // Prepend a byte order mark. 40

Trong tệp

.submitButton {
    margin: 0 10px;
}
69, câu lệnh
.submitButton {
    margin: 0 10px;
}
69 có thể tùy ý được theo sau bởi một cuộc gọi đến
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
43.

Trong một mô -đun ES, các câu lệnh

.submitButton {
    margin: 0 10px;
}
71 có thể tùy ý được theo sau bởi một cuộc gọi đến
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
43.

3.6 .submitButton { margin: 0 10px; } 77 và .submitButton { margin: 0 10px; } 78

Nhập khẩu được thực hiện với các câu lệnh

.submitButton {
    margin: 0 10px;
}
77 và
.submitButton {
    margin: 0 10px;
}
78. Các tên được nhập bởi một câu lệnh
.submitButton {
    margin: 0 10px;
}
77 có thể được sử dụng cả trong mã và trong các chú thích loại, trong khi các tên được nhập bởi
.submitButton {
    margin: 0 10px;
}
78 chỉ có thể được sử dụng trong các chú thích loại.

Các câu lệnh

.submitButton {
    margin: 0 10px;
}
77 và
.submitButton {
    margin: 0 10px;
}
78 tạo thành một khối liền kề không có đường trống. Khối này tuân theo tuyên bố
.submitButton {
    margin: 0 10px;
}
69 được phân tách bằng một dòng trống duy nhất. Toàn bộ đối số cho
.submitButton {
    margin: 0 10px;
}
77 hoặc
.submitButton {
    margin: 0 10px;
}
78 là không gian tên được xác định bởi
.submitButton {
    margin: 0 10px;
}
69 trong một tệp riêng biệt. Các câu lệnh
.submitButton {
    margin: 0 10px;
}
77 và
.submitButton {
    margin: 0 10px;
}
78 có thể không xuất hiện ở bất kỳ nơi nào khác trong tệp.

Mỗi

.submitButton {
    margin: 0 10px;
}
77 hoặc
.submitButton {
    margin: 0 10px;
}
78 được gán cho một bí danh không đổi, hoặc nếu không sẽ bị phá hủy thành một số bí danh không đổi. Những bí danh này là cách duy nhất được chấp nhận để đề cập đến các phụ thuộc trong các chú thích hoặc mã loại. Không được sử dụng các không gian tên đủ điều kiện ở bất cứ đâu, ngoại trừ như một đối số với
.submitButton {
    margin: 0 10px;
}
77 hoặc
.submitButton {
    margin: 0 10px;
}
78.

Ngoại lệ: Các loại, biến và chức năng được khai báo trong các tệp bên ngoài phải sử dụng tên đủ điều kiện của chúng trong các chú thích và mã loại.: Types, variables, and functions declared in externs files have to use their fully qualified name in type annotations and code.

Bí danh phải khớp với thành phần phân tách chấm cuối cùng của không gian tên của mô-đun đã nhập.

Ngoại lệ: Trong một số trường hợp nhất định, các thành phần bổ sung của không gian tên có thể được sử dụng để tạo thành một bí danh dài hơn. Bí danh kết quả phải giữ lại vỏ của định danh ban đầu sao cho nó vẫn xác định chính xác loại của nó. Bí danh dài hơn có thể được sử dụng để phân loại các bí danh giống hệt nhau hoặc nếu nó cải thiện đáng kể khả năng đọc. Ngoài ra, phải sử dụng bí danh dài hơn để ngăn chặn các loại bản địa như

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
64,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
65,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
66,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
67 và
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
68 (để biết danh sách đầy đủ hơn, hãy xem các đối tượng tích hợp tiêu chuẩn và API Web tại MDN). Khi đổi tên bí danh bị phá hủy, một không gian phải tuân theo đại tràng theo yêu cầu trong ??.
: In certain cases, additional components of the namespace can be used to form a longer alias. The resulting alias must retain the original identifier's casing such that it still correctly identifies its type. Longer aliases may be used to disambiguate otherwise identical aliases, or if it significantly improves readability. In addition, a longer alias must be used to prevent masking native types such as
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
64,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
65,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
66,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
67, and
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
68 (for a more complete list, see Standard Built-in Objects and Web APIs at MDN). When renaming destructured aliases, a space must follow the colon as required in ??.

Một tệp không nên chứa cả câu lệnh

.submitButton {
    margin: 0 10px;
}
77 và
.submitButton {
    margin: 0 10px;
}
78 cho cùng một không gian tên. Nếu tên đã nhập được sử dụng cả trong mã và trong các chú thích loại, nó sẽ được nhập bằng một câu lệnh
.submitButton {
    margin: 0 10px;
}
77.

Nếu một mô -đun chỉ được nhập cho các tác dụng phụ của nó, cuộc gọi phải là

.submitButton {
    margin: 0 10px;
}
77 (không phải là
.submitButton {
    margin: 0 10px;
}
78) và có thể bị bỏ qua. Một nhận xét là cần thiết để giải thích lý do tại sao điều này là cần thiết và đàn áp cảnh báo trình biên dịch.

Các dòng được sắp xếp theo các quy tắc sau: Tất cả đều yêu cầu với tên ở phía bên trái đến trước, được sắp xếp theo thứ tự bảng chữ cái theo các tên đó. Sau đó, sự phá hủy yêu cầu, một lần nữa được sắp xếp theo tên ở phía bên trái. Cuối cùng, mọi yêu cầu gọi là độc lập (nói chung chúng là dành cho các mô -đun được nhập chỉ vì tác dụng phụ của chúng).

Mẹo: Không cần phải ghi nhớ lệnh này và thực thi thủ công. Bạn có thể dựa vào IDE của mình để báo cáo yêu cầu không được sắp xếp chính xác.

Nếu một bí danh dài hoặc tên mô-đun sẽ khiến một dòng vượt quá giới hạn 80 cột, thì không được gói: yêu cầu các dòng là một ngoại lệ đối với giới hạn 80 cột.must not be wrapped: require lines are an exception to the 80-column limit.

Example:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
3

Discouraged:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
4

Disallowed:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
5

3.7 Việc triển khai tệp

Việc thực hiện thực tế theo sau sau khi tất cả thông tin phụ thuộc được khai báo (cách nhau bởi ít nhất một dòng trống).

Điều này có thể bao gồm bất kỳ khai báo mô-đun địa phương (hằng số, biến, lớp, chức năng, v.v.), cũng như bất kỳ ký hiệu được xuất nào.

4 định dạng

Thuật ngữ Lưu ý: Xây dựng giống như khối đề cập đến phần thân của một lớp, chức năng, phương thức hoặc khối mã được phân tách bằng niềng. Lưu ý rằng, bởi ?? và ??, bất kỳ mảng hoặc đối tượng theo nghĩa đen nào có thể được đối xử như thể nó là một cấu trúc giống như khối.: block-like construct refers to the body of a class, function, method, or brace-delimited block of code. Note that, by ?? and ??, any array or object literal may optionally be treated as if it were a block-like construct.

Mẹo: Sử dụng

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
74. Cộng đồng JavaScript đã đầu tư nỗ lực để đảm bảo Clang-Format thực hiện đúng trên các tệp JavaScript.
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
74 có tích hợp với một số biên tập viên phổ biến.

4.1 niềng răng

4.1.1 Niềng răng được sử dụng cho tất cả các cấu trúc điều khiển

Niềng răng được yêu cầu cho tất cả các cấu trúc điều khiển (nghĩa là

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
76,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
77,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
78,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
79,
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
80, cũng như bất kỳ ai khác), ngay cả khi cơ thể chỉ chứa một câu lệnh. Tuyên bố đầu tiên của một khối không trống phải bắt đầu trên dòng riêng của nó.

Disallowed:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
6

Ngoại lệ: Một câu lệnh đơn giản nếu có thể phù hợp hoàn toàn trên một dòng không có gói (và điều đó không có một điều khác) có thể được giữ trên một dòng không có niềng răng khi nó cải thiện khả năng đọc. Đây là trường hợp duy nhất trong đó cấu trúc điều khiển có thể bỏ qua niềng răng và newlines.: A simple if statement that can fit entirely on a single line with no wrapping (and that doesn’t have an else) may be kept on a single line with no braces when it improves readability. This is the only case in which a control structure may omit braces and newlines.

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
7

4.1.2 Khối không trống: Kiểu K & R

Niềng răng theo phong cách Kernighan và Ritchie (khung Ai Cập) cho các khối không trống và các cấu trúc giống như khối:

  • Không có đường ngắt trước khi nẹp mở.
  • Dòng phá vỡ sau khi nẹp mở.
  • Dòng phá vỡ trước khi nẹp đóng.
  • Phá vỡ dòng sau khi đóng niềng răng nếu niềng răng đó chấm dứt câu lệnh hoặc phần thân của hàm hoặc câu lệnh lớp hoặc phương pháp lớp. Cụ thể, không có đường ngắt sau khi nẹp nếu được theo sau bởi
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    77,
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    82,
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    80 hoặc dấu phẩy, dấu chấm phẩy hoặc phần tử phải.

Thí dụ:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
8

4.1.3 Khối trống: Có thể ngắn gọn

Một khối trống hoặc cấu trúc giống như khối có thể được đóng ngay sau khi nó được mở, không có ký tự, không gian hoặc đường phân chia ở giữa (nghĩa là

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
84), trừ khi nó là một phần của câu lệnh đa khối (một câu trực tiếp chứa nhiều Khối: ________ 276/________ 277 hoặc ________ 287/________ 282/________ 289).unless it is a part of a multi-block statement (one that directly contains multiple blocks:
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
76/
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
77 or
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
87/
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
82/
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
89).

Example:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
9

Disallowed:

goog.module('search.urlHistory.UrlHistoryService');
0

4.2 Khối thụt: +2 không gian

Mỗi lần mở một khối hoặc cấu trúc giống như khối mới, thụt lề tăng thêm hai khoảng trắng. Khi khối kết thúc, vết lõm trở lại mức thụt đầu trước. Cấp độ thụt áp dụng cho cả mã và nhận xét trong suốt khối. (Xem ví dụ trong ??).

4

Bất kỳ mảng nào theo nghĩa đen có thể tùy ý được định dạng như thể nó là một cấu trúc giống như khối. Ví dụ: sau đây đều hợp lệ (không phải là danh sách đầy đủ):not an exhaustive list):

goog.module('search.urlHistory.UrlHistoryService');
1
goog.module('search.urlHistory.UrlHistoryService');
2

Các kết hợp khác được cho phép, đặc biệt khi nhấn mạnh các nhóm ngữ nghĩa giữa các yếu tố, nhưng không nên được sử dụng để giảm kích thước thẳng đứng của các mảng lớn hơn.

4.2.2 BÀI VIẾT Đối tượng: Tùy chọn Khối giống như khối

Bất kỳ đối tượng nào theo nghĩa đen có thể tùy ý được định dạng như thể nó là một cấu trúc giống như khối. Các ví dụ tương tự áp dụng như ??. Ví dụ: sau đây đều hợp lệ (không phải là danh sách đầy đủ):not an exhaustive list):

goog.module('search.urlHistory.UrlHistoryService');
3
goog.module('search.urlHistory.UrlHistoryService');
4

4.2.3 Lớp học

Lớp học (cho dù khai báo hoặc biểu thức) được thụt vào làm khối. Không thêm dấu chấm phẩy sau các phương pháp, hoặc sau khi đóng cửa của một tuyên bố lớp (các câu lệnh, ví dụ như các bài tập mà có chứa các biểu thức lớp vẫn bị chấm dứt bằng dấu chấm phẩy). Sử dụng từ khóa

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
90, nhưng không phải là chú thích
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
91 JSDOC trừ khi lớp mở rộng một loại tạm thời.

Example:

goog.module('search.urlHistory.UrlHistoryService');
5
goog.module('search.urlHistory.UrlHistoryService');
6

4.2.4 Biểu thức chức năng

Khi khai báo một hàm ẩn danh trong danh sách các đối số cho một cuộc gọi chức năng, phần thân của hàm được thụt vào hai khoảng trắng nhiều hơn độ sâu thụt trước.

Example:

goog.module('search.urlHistory.UrlHistoryService');
7

4.2.5 Câu lệnh chuyển đổi

Như với bất kỳ khối nào khác, nội dung của một khối chuyển đổi được thụt vào +2.

Sau khi một nhãn chuyển đổi, một dòng mới xuất hiện và mức thụt được tăng +2, chính xác như thể một khối được mở. Một khối rõ ràng có thể được sử dụng nếu được yêu cầu bởi phạm vi từ vựng. Nhãn chuyển đổi sau đây trở về cấp độ thụt trước đó, như thể một khối đã bị đóng.

Một dòng trống là tùy chọn giữa

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
92 và trường hợp sau.

Example:

goog.module('search.urlHistory.UrlHistoryService');
8

4.3 Báo cáo

4.3.1 Một tuyên bố trên mỗi dòng

Mỗi câu lệnh được theo sau bởi một dòng phá vỡ.

4.3.2 Semicolons được yêu cầu

Mỗi tuyên bố phải được chấm dứt với một dấu chấm phẩy. Dựa vào việc chèn dấu chấm phẩy tự động bị cấm.

Giới hạn cột 4,4: 80

Mã JavaScript có giới hạn cột là 80 ký tự. Trừ khi có lưu ý dưới đây, bất kỳ dòng nào sẽ vượt quá giới hạn này phải được bọc dòng, như được giải thích trong ??.

Exceptions:

  1. .submitButton {
        margin: 0 10px;
    }
    
    69,
    .submitButton {
        margin: 0 10px;
    }
    
    77 và
    .submitButton {
        margin: 0 10px;
    }
    
    78 (xem ?? và ??).
  2. Mô -đun ES
    .submitButton {
        margin: 0 10px;
    }
    
    71 và
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    11 (xem ?? và ??).
  3. Các dòng không thể tuân theo giới hạn cột là không thể hoặc sẽ cản trở khả năng khám phá. Những ví dụ bao gồm:
    • Một URL dài nên có thể nhấp trong nguồn.
    • Một lệnh shell dự định sẽ được sao chép và thực hiện.
    • Một chuỗi dài theo nghĩa đen có thể cần được sao chép hoặc tìm kiếm toàn bộ (ví dụ: một đường dẫn tệp dài).

4,5 bao bọc dòng

Thuật ngữ Lưu ý: Gói dòng đang phá vỡ một đoạn mã thành nhiều dòng để tuân theo giới hạn cột, trong đó khối có thể phù hợp về mặt pháp lý trong một dòng.: Line wrapping is breaking a chunk of code into multiple lines to obey column limit, where the chunk could otherwise legally fit in a single line.

Không có công thức toàn diện, xác định cho thấy chính xác cách bao bọc dòng trong mọi tình huống. Rất thường có một số cách hợp lệ để bao bọc dòng cùng một đoạn mã.

Lưu ý: Mặc dù lý do điển hình cho việc bao bọc dòng là để tránh tràn ra giới hạn cột, nhưng ngay cả mã thực tế sẽ phù hợp trong giới hạn cột có thể được bao bọc theo quyết định của tác giả.

Mẹo: Trích xuất một phương pháp hoặc biến cục bộ có thể giải quyết vấn đề mà không cần bao bọc dòng.

4.5.1 Ở đâu để phá vỡ

Chỉ thị chính của việc bao bọc dòng là: thích phá vỡ ở cấp độ cú pháp cao hơn.higher syntactic level.

Preferred:

goog.module('search.urlHistory.UrlHistoryService');
9

Discouraged:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
0

Trong ví dụ trước, các mức cú pháp từ cao nhất đến thấp nhất như sau: gán, phân chia, gọi chức năng, tham số, hằng số số.

Các nhà khai thác được bọc như sau:

  1. Khi một dòng bị phá vỡ tại một toán tử, giờ nghỉ sẽ xuất hiện sau biểu tượng. (Lưu ý rằng đây không phải là thực tiễn tương tự được sử dụng trong Google Style cho Java.)
    1. Điều này không áp dụng cho dấu chấm (
      /* Best: perfectly clear even without a comment. */
      const units = 'μs';
      
      /* Allowed: but unnecessary as μ is a printable character. */
      const units = '\u03bcs'; // 'μs'
      
      /* Good: use escapes for non-printable characters with a comment for clarity. */
      return '\ufeff' + content;  // Prepend a byte order mark.
      
      98), thực sự không phải là người vận hành.
  2. Một tên phương thức hoặc tên tạo hàm được gắn vào dấu ngoặc đơn mở (
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    99) theo sau nó.
  3. Một dấu phẩy (
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    00) được gắn vào mã thông báo trước nó.

Lưu ý: Mục tiêu chính cho gói dòng là có mã rõ ràng, không nhất thiết phải là mã phù hợp với số lượng nhỏ nhất.

4.5.2 Các dòng tiếp tục thụt vào ít nhất +4 không gian

Khi bao bọc dòng, mỗi dòng sau lần đầu tiên (mỗi dòng tiếp tục) được thụt vào ít nhất +4 từ dòng ban đầu, trừ khi nó nằm trong các quy tắc của thụt khối.

Khi có nhiều dòng tiếp tục, thụt có thể được thay đổi ngoài +4 khi thích hợp. Nói chung, các dòng tiếp tục ở cấp độ cú pháp sâu hơn được thụt tính bởi các bội số lớn hơn của 4 và hai dòng sử dụng cùng một mức thụt vào khi và chỉ khi chúng bắt đầu với các phần tử song song cú pháp.

?? giải quyết việc thực hành không nản lòng khi sử dụng một số lượng không gian thay đổi để sắp xếp các mã thông báo nhất định với các dòng trước đó.

4.6 Whitespace

4.6.1 khoảng trắng dọc

Một dòng trống duy nhất xuất hiện:

  1. Giữa các phương pháp liên tiếp trong một lớp hoặc đối tượng theo nghĩa đen
    1. Ngoại lệ: Một dòng trống giữa hai định nghĩa thuộc tính liên tiếp theo nghĩa đen của một đối tượng (không có mã nào khác giữa chúng) là tùy chọn. Những dòng trống như vậy được sử dụng khi cần thiết để tạo các nhóm hợp lý của các trường.
  2. Trong các cơ quan phương pháp, một cách tiết kiệm để tạo ra các nhóm câu lệnh logic. Các đường trống ở đầu hoặc cuối của một cơ thể chức năng không được phép.
  3. Tùy chọn trước phương pháp đầu tiên hoặc sau phương pháp cuối cùng trong một lớp hoặc đối tượng theo nghĩa đen (không được khuyến khích cũng không nản lòng).
  4. Theo yêu cầu của các phần khác của tài liệu này (ví dụ: ??).

Nhiều dòng trống liên tiếp được cho phép, nhưng không bao giờ được yêu cầu (cũng không được khuyến khích).

4.6.2 khoảng trắng ngang

Việc sử dụng khoảng trắng ngang phụ thuộc vào vị trí và rơi vào ba loại rộng: dẫn đầu (khi bắt đầu một dòng), theo dõi (ở cuối một dòng) và nội bộ. Khoảng cách hàng đầu (tức là, thụt lề) được giải quyết ở nơi khác. Trailing Whitespace bị cấm.

Ngoài các yêu cầu của ngôn ngữ hoặc các quy tắc phong cách khác, và ngoài các chữ, nhận xét và JSDOC, một không gian ASCII nội bộ duy nhất còn xuất hiện ở những nơi sau.only.

  1. Tách bất kỳ từ dành riêng nào (chẳng hạn như
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    76,
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    78 hoặc
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    82) ngoại trừ
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    04 và
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    05, từ dấu ngoặc đơn mở (
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    99) theo nó trên dòng đó.
  2. Tách bất kỳ từ dành riêng nào (chẳng hạn như
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    77 hoặc
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    82) khỏi một nẹp xoăn đóng (
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    09) đi trước nó trên dòng đó.
  3. Trước khi có niềng răng xoăn mở (
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    10), với hai ngoại lệ:
    1. Trước một đối tượng theo nghĩa đen là đối số đầu tiên của hàm hoặc phần tử đầu tiên trong một mảng theo nghĩa đen (ví dụ:
      /* Poor: the reader has no idea what character this is. */
      const units = '\u03bcs';
      
      11).
    2. Trong một bản mở rộng mẫu, vì nó bị cấm bởi ngôn ngữ (ví dụ: hợp lệ:
      /* Poor: the reader has no idea what character this is. */
      const units = '\u03bcs';
      
      12, không hợp lệ:
      /* Poor: the reader has no idea what character this is. */
      const units = '\u03bcs';
      
      13).
  4. Ở cả hai phía của bất kỳ toán tử nhị phân hoặc ternary.
  5. Sau khi dấu phẩy (
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    00) hoặc dấu chấm phẩy (
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    15). Lưu ý rằng không gian không bao giờ được phép trước các ký tự này.
  6. Sau đại tràng (
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    16) trong một đối tượng theo nghĩa đen.
  7. Ở cả hai phía của chém đôi (
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    17) bắt đầu một nhận xét cuối cùng. Ở đây, nhiều không gian được cho phép, nhưng không bắt buộc.
  8. Sau một ký tự nhận xét khối mở và ở cả hai mặt của ký tự gần (ví dụ: đối với các khai báo loại ngắn, phôi và tên tham số Nhận xét:
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    18; hoặc
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    19; hoặc
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    20).

4.6.3 Căn chỉnh ngang: Không nản lòng

Thuật ngữ Lưu ý: Căn chỉnh theo chiều ngang là thực tiễn thêm một số lượng không gian bổ sung trong mã của bạn với mục tiêu làm cho các mã thông báo nhất định xuất hiện ngay bên dưới một số mã thông báo khác trên các dòng trước.: Horizontal alignment is the practice of adding a variable number of additional spaces in your code with the goal of making certain tokens appear directly below certain other tokens on previous lines.

Thực tiễn này được cho phép, nhưng nó thường không được khuyến khích bởi phong cách Google. Thậm chí không cần phải duy trì sự liên kết ngang ở những nơi đã được sử dụng.generally discouraged by Google Style. It is not even required to maintain horizontal alignment in places where it was already used.

Dưới đây là một ví dụ mà không liên kết, theo sau là một với sự liên kết. Cả hai đều được phép, nhưng sau này không được khuyến khích:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
1

Mẹo: Căn chỉnh có thể hỗ trợ khả năng đọc, nhưng nó tạo ra vấn đề cho việc bảo trì trong tương lai. Hãy xem xét một sự thay đổi trong tương lai cần chỉ chạm vào một dòng. Sự thay đổi này có thể để lại định dạng trước đây bị xáo trộn, và điều đó được cho phép. Thông thường, nó cũng nhắc nhở các lập trình viên (có lẽ bạn) cũng điều chỉnh khoảng trắng trên các dòng gần đó, có thể kích hoạt một loạt các định dạng lại. Sự thay đổi một dòng đó bây giờ có bán kính nổ. Điều này có thể dẫn đến điều tồi tệ nhất trong việc bận rộn vô nghĩa, nhưng tốt nhất là nó vẫn làm hỏng thông tin lịch sử phiên bản, làm chậm người đánh giá và làm trầm trọng thêm xung đột hợp nhất.

4.6.4 Đối số chức năng

Thích đặt tất cả các đối số chức năng trên cùng một dòng với tên hàm. Nếu làm như vậy sẽ vượt quá giới hạn 80 cột, các đối số phải được bọc theo một cách có thể đọc được. Để tiết kiệm không gian, bạn có thể bao bọc càng gần 80 càng tốt hoặc đặt mỗi đối số trên dòng riêng của mình để tăng cường khả năng đọc. Th thụt lề nên là bốn không gian. Căn chỉnh với dấu ngoặc đơn được cho phép, nhưng không được khuyến khích. Dưới đây là các mẫu phổ biến nhất để gói đối số:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
2

4.7 Dấu ngoặc nhóm: Khuyến nghị

Dấu ngoặc nhóm tùy chọn chỉ được bỏ qua khi tác giả và người đánh giá đồng ý rằng không có cơ hội hợp lý rằng mã sẽ bị giải thích sai nếu không có chúng, họ cũng sẽ không làm cho mã dễ đọc hơn. Không hợp lý khi cho rằng mọi người đọc đều có toàn bộ bảng điều khiển toán tử được ghi nhớ.

Không sử dụng dấu ngoặc đơn không cần thiết xung quanh toàn bộ biểu thức sau

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
21,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
22,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
23,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
24,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
25,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
26,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
27,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
28 hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
29.

Điểm dừng được yêu cầu cho các loại đúc:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
30.

Phần này giải quyết các ý kiến ​​thực hiện. JSDOC được giải quyết riêng trong ??.

Nhận xét khối được thụt vào ở cùng cấp độ với mã xung quanh. Họ có thể ở trong

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
31 hoặc ________ 317 theo phong cách. Đối với các nhận xét đa dòng ____331, các dòng tiếp theo phải bắt đầu với * được liên kết với
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
34 trên dòng trước, để làm cho nhận xét rõ ràng không có bối cảnh bổ sung.

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
3

Nhận xét không được đặt trong các hộp được vẽ bằng dấu hoa thị hoặc các ký tự khác.

Không sử dụng JSDOC (

.submitButton {
    margin: 0 10px;
}
51) để nhận xét thực hiện.

Tên tham số Thông số Nhận xét nên được sử dụng bất cứ khi nào giá trị và tên phương thức không đủ truyền tải ý nghĩa và tái cấu trúc phương pháp để rõ ràng hơn là không khả thi. Định dạng ưa thích của chúng là trước giá trị với =:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
4

Để có tính nhất quán với mã xung quanh, bạn có thể đặt chúng sau giá trị mà không có =:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
5

5 tính năng ngôn ngữ

JavaScript bao gồm nhiều tính năng đáng ngờ (và thậm chí nguy hiểm). Phần này phân định các tính năng có thể hoặc không được sử dụng và bất kỳ ràng buộc bổ sung nào về việc sử dụng chúng.

5.1 Khai báo biến cục bộ

5.1.1 Sử dụng
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36 và
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
37

Khai báo tất cả các biến cục bộ với

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36 hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
37. Sử dụng const theo mặc định, trừ khi một biến cần được chỉ định lại. Từ khóa
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 không được sử dụng.

5.1.2 Một biến cho mỗi tuyên bố

Mỗi khai báo biến cục bộ chỉ khai báo một biến: các khai báo như

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
41 không được sử dụng.

5.1.3 được khai báo khi cần, khởi tạo càng sớm càng tốt

Các biến cục bộ không được khai báo theo thói quen khi bắt đầu cấu trúc khối hoặc khối chứa của chúng. Thay vào đó, các biến cục bộ được khai báo gần với điểm chúng được sử dụng lần đầu tiên (trong lý do), để giảm thiểu phạm vi của chúng.not habitually declared at the start of their containing block or block-like construct. Instead, local variables are declared close to the point they are first used (within reason), to minimize their scope.

5.1.4 Các loại khai báo khi cần thiết

Chú thích loại JSDOC có thể được thêm vào dòng trên khai báo, hoặc nếu không nội tuyến trước tên biến nếu không có JSDOC nào khác.

Example:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
6

Không cho phép các kiểu Inline và JSDOC không được phép: trình biên dịch sẽ chỉ xử lý JSDOC đầu tiên và các chú thích nội tuyến sẽ bị mất.

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
7

Mẹo: Có nhiều trường hợp trình biên dịch có thể suy ra một loại templatized nhưng không phải là tham số của nó. Điều này đặc biệt là trường hợp khi cuộc gọi khởi tạo theo nghĩa đen hoặc hàm tạo không bao gồm bất kỳ giá trị nào của loại tham số mẫu (ví dụ: các mảng trống, đối tượng,

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
67S hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
43S) hoặc nếu biến được sửa đổi trong việc đóng. Chú thích loại biến cục bộ đặc biệt hữu ích trong các trường hợp này vì nếu không trình biên dịch sẽ suy ra tham số mẫu là không xác định.

5.2 Mảng nghĩa đen

5.2.1 Sử dụng dấu phẩy kéo dài

Bao gồm một dấu phẩy kéo dài bất cứ khi nào có sự phá vỡ dòng giữa phần tử cuối cùng và khung đóng.

Example:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
8

5.2.2 Không sử dụng hàm tạo
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
44 Variadic

Hàm tạo có dễ bị lỗi nếu các đối số được thêm hoặc xóa. Sử dụng một nghĩa đen thay thế.

Disallowed:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
9

Điều này hoạt động như mong đợi ngoại trừ trường hợp thứ ba: nếu

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
45 là một số toàn bộ thì
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
46 là một mảng có kích thước
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
45 trong đó tất cả các yếu tố là
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
48. Nếu
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
45 là bất kỳ số nào khác, thì một ngoại lệ sẽ được ném và nếu nó là bất cứ điều gì khác thì nó sẽ là một mảng một phần tử.

Thay vào đó, hãy viết

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
0

Phân bổ rõ ràng một mảng có độ dài nhất định bằng cách sử dụng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
50 được cho phép khi thích hợp.

5.2.3 Thuộc tính không phải là số

Không xác định hoặc sử dụng các thuộc tính không phải là số trên một mảng (trừ

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
51). Sử dụng
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
67 (hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
53) thay thế.

5.2.4 Phá hủy

Các chữ cái có thể được sử dụng ở phía bên trái của một gán để thực hiện phá hủy (chẳng hạn như khi giải nén nhiều giá trị từ một mảng hoặc có thể lặp lại). Một phần tử nghỉ cuối cùng có thể được bao gồm (không có khoảng trống giữa

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
54 và tên biến). Các yếu tố nên được bỏ qua nếu chúng không được sử dụng.

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
1

Phá hủy cũng có thể được sử dụng cho các tham số chức năng (lưu ý rằng tên tham số được yêu cầu nhưng bị bỏ qua). Luôn chỉ định

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
55 là giá trị mặc định nếu tham số mảng bị phá hủy là tùy chọn và cung cấp các giá trị mặc định ở phía bên trái:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
2

Disallowed:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
3

Mẹo: Đối với (un) đóng gói nhiều giá trị vào tham số hoặc trả về hàm, thích phá hủy đối tượng để phá hủy mảng khi có thể, vì nó cho phép đặt tên cho các phần tử riêng lẻ và chỉ định một loại khác nhau cho mỗi phần tử.

5.2.5 Nhà điều hành lây lan

Các văn bản mảng có thể bao gồm toán tử lây lan (

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
54) để làm phẳng các phần tử ra khỏi một hoặc nhiều lần lặp khác. Toán tử lây lan nên được sử dụng thay vì các cấu trúc khó xử hơn với
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
57. Không có không gian sau
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
54.

Example:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
4

5.3 đối tượng theo nghĩa đen

5.3.1 Sử dụng dấu phẩy kéo dài

Bao gồm một dấu phẩy kéo dài bất cứ khi nào có một dòng phá vỡ giữa tài sản cuối cùng và nẹp đóng.

5.3.2 Không sử dụng hàm tạo
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
53

Mặc dù

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
53 không có vấn đề tương tự như
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
44, nhưng nó vẫn không được phép cho sự nhất quán. Thay vào đó, sử dụng một đối tượng (
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
84 hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
63).

5.3.3 Không trộn các phím được trích dẫn và chưa được trích dẫn

Các chữ cái có thể đại diện cho một trong hai cấu trúc (với các khóa và/hoặc ký hiệu chưa được trích xuất) hoặc các dicts (với các khóa được trích dẫn và/hoặc tính toán). Không trộn các loại khóa này trong một đối tượng theo nghĩa đen.

Disallowed:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
5

Điều này cũng mở rộng để chuyển tên tài sản cho các chức năng, như

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
64. Cụ thể, làm như vậy sẽ phá vỡ mã được biên dịch vì trình biên dịch không thể đổi tên/obfuscate chuỗi chữ.

Disallowed:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
6

Điều này được thực hiện tốt nhất như:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
7

5.3.4 Tên thuộc tính được tính toán

Tên thuộc tính được tính toán (ví dụ:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
65) được cho phép và được coi là các khóa theo kiểu Dictyle (trích dẫn) (tức là, không được trộn với các khóa không được trích xuất) trừ khi thuộc tính được tính toán là một ký hiệu (ví dụ:
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
66). Các giá trị enum cũng có thể được sử dụng cho các khóa tính toán, nhưng không nên được trộn với các phím không EREM trong cùng một chữ.

5.3.5 Phương pháp tốc ký

Các phương pháp có thể được định nghĩa trên các chữ cái đối tượng bằng phương pháp tốc ký (

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
67) thay cho đại tràng ngay sau đó là một hàm
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
04 hoặc hàm mũi tên theo nghĩa đen.

Thí dụ:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
8

Lưu ý rằng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69 trong một phương pháp tốc ký hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
04 đề cập đến chính đối tượng theo nghĩa đen trong khi
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69 trong hàm mũi tên đề cập đến phạm vi bên ngoài đối tượng theo nghĩa đen.

Example:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
9

5.3.6 Tính chất tốc ký

Các thuộc tính tốc ký được cho phép trên các nghĩa đen đối tượng.

Example:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
0

5.3.7 Phá hủy

Các mẫu phá hủy đối tượng có thể được sử dụng ở phía bên trái của một gán để thực hiện phá hủy và giải nén nhiều giá trị khỏi một đối tượng.

Các đối tượng bị phá hủy cũng có thể được sử dụng làm tham số chức năng, nhưng nên được giữ đơn giản nhất có thể: một mức độ duy nhất của các thuộc tính tốc ký chưa được trích xuất. Mức độ sâu hơn của các thuộc tính làm tổ và tính toán có thể không được sử dụng trong phá hủy tham số. Chỉ định bất kỳ giá trị mặc định nào ở phía bên trái của tham số bị phá hủy (

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
72, thay vì
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
73) và nếu một đối tượng bị phá hủy là tùy chọn, nó phải mặc định là
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
84. JSDOC cho tham số bị phá hủy có thể được đặt bất kỳ tên nào (tên không được sử dụng nhưng được yêu cầu bởi trình biên dịch).

Example:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
1

Disallowed:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
2

Phá hủy cũng có thể được sử dụng cho các tuyên bố

.submitButton {
    margin: 0 10px;
}
77, và trong trường hợp này không được gói: toàn bộ tuyên bố chiếm một dòng, bất kể nó là bao lâu (xem ??).

5.3.8 Enums

Các liệt kê được xác định bằng cách thêm chú thích

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
76 vào một đối tượng theo nghĩa đen. Các thuộc tính bổ sung có thể không được thêm vào một enum sau khi nó được xác định. Các enum phải không đổi, và tất cả các giá trị enum phải là bất biến sâu sắc.

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
3

5.4 lớp

5.4.1 Chất xây dựng

Người xây dựng là tùy chọn. Các trình xây dựng lớp con phải gọi

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
77 trước khi đặt bất kỳ trường nào hoặc truy cập
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69. Các giao diện nên khai báo các thuộc tính phi phương pháp trong hàm tạo.

5.4.2 Trường

Đặt tất cả các trường đối tượng cụ thể (nghĩa là tất cả các thuộc tính khác ngoài các phương thức) trong hàm tạo. Các trường chú thích không bao giờ được gán lại bằng

.submitButton {
    margin: 0 10px;
}
99 (những trường này không cần phải có bất biến sâu sắc). Chú thích các trường không công khai với chú thích khả năng hiển thị thích hợp (
.submitButton {
    margin: 0 10px;
}
97,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
81,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
82), và kết thúc tất cả các tên của
.submitButton {
    margin: 0 10px;
}
97 với một dấu gạch dưới. Các trường không bao giờ được đặt trên một lớp cụ thể '
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
84.

Example:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
4

Mẹo: Các thuộc tính không bao giờ nên được thêm vào hoặc loại bỏ khỏi một trường hợp sau khi hàm tạo kết thúc, vì nó cản trở đáng kể khả năng tối ưu hóa VMS VMS. Nếu cần thiết, các trường được khởi tạo sau này phải được đặt rõ ràng thành

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
48 trong hàm tạo để ngăn chặn các thay đổi hình dạng sau này. Thêm
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
86 vào một đối tượng sẽ kiểm tra xem các thuộc tính không được khai báo không được thêm/truy cập. Các lớp có điều này được thêm theo mặc định.

5.4.3 Thuộc tính tính toán

Các thuộc tính được tính toán chỉ có thể được sử dụng trong các lớp khi thuộc tính là biểu tượng. Các thuộc tính theo kiểu Dict (nghĩa là, được trích dẫn hoặc tính toán các khóa không symbol, như được định nghĩa trong ??) không được phép. Một phương thức

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
66 nên được xác định cho bất kỳ lớp nào có thể lặp lại một cách logic. Ngoài ra,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
88 nên được sử dụng một cách tiết kiệm.

Mẹo: Hãy cẩn thận khi sử dụng bất kỳ ký hiệu tích hợp nào khác (ví dụ:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
89) vì chúng không được trình biên dịch không được điền và do đó sẽ không hoạt động trong các trình duyệt cũ hơn.

5.4.4 Phương pháp tĩnh

Trong trường hợp nó không can thiệp vào khả năng đọc, thích các hàm mô-đun-local hơn các phương thức tĩnh riêng tư.

Các phương pháp tĩnh chỉ nên được gọi trên lớp cơ sở. Không nên gọi các phương thức tĩnh trên các biến chứa một thể hiện động có thể là hàm tạo hoặc hàm tạo phân lớp (và phải được xác định bằng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
90 nếu điều này được thực hiện) và không được gọi trực tiếp trên một lớp con không xác định phương pháp tự nó.

Disallowed:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
5

5.4.5 Tuyên bố lớp cũ

Mặc dù các lớp ES6 được ưa thích, có những trường hợp các lớp ES6 có thể không khả thi. Ví dụ:

  1. Nếu có hoặc sẽ tồn tại các lớp con, bao gồm các khung tạo ra các lớp con, điều đó không thể được thay đổi ngay lập tức để sử dụng cú pháp lớp ES6. Nếu một lớp như vậy sử dụng cú pháp ES6, tất cả các lớp con hạ lưu không sử dụng cú pháp lớp ES6 sẽ cần phải được sửa đổi.

  2. Các khung yêu cầu giá trị

    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    69 đã biết trước khi gọi hàm tạo siêu lớp, vì các hàm tạo có các lớp ES6 không có quyền truy cập vào giá trị
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    69 cho đến khi cuộc gọi đến
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    05 trả về.

Theo tất cả các cách khác, hướng dẫn kiểu vẫn áp dụng cho mã này:

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
37,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36, các tham số mặc định, phần còn lại và các hàm mũi tên nên được sử dụng khi thích hợp.

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
96 cho phép định nghĩa giống như lớp tương tự như cú pháp lớp ES6:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
6

Ngoài ra, trong khi

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
96 nên được ưu tiên cho tất cả các mã mới, cú pháp truyền thống hơn cũng được cho phép.

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
7

Các thuộc tính trên mỗi-nên được xác định trong hàm tạo sau khi gọi đến hàm tạo siêu lớp, nếu có một siêu lớp. Các phương pháp nên được xác định trên nguyên mẫu của hàm tạo.

Xác định hệ thống phân cấp nguyên mẫu xây dựng chính xác là khó hơn so với lần đầu tiên xuất hiện! Vì lý do đó, tốt nhất là sử dụng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
98 từ thư viện đóng cửa.

5.4.6 Không thao tác trực tiếp

Từ khóa

goog.module('search.urlHistory.UrlHistoryService');
00 cho phép các định nghĩa lớp rõ ràng và dễ đọc hơn so với việc xác định các thuộc tính
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
84. Mã thực hiện thông thường không có doanh nghiệp thao túng các đối tượng này, mặc dù chúng vẫn hữu ích cho việc xác định các lớp như được định nghĩa trong ??. Mixin và sửa đổi các nguyên mẫu của các đối tượng tích hợp bị cấm rõ ràng.

Ngoại lệ: Mã khung (như polymer, hoặc góc) có thể cần sử dụng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
84 và không nên dùng đến các cách giải quyết thậm chí để tránh làm như vậy.: Framework code (such as Polymer, or Angular) may need to use
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
84s, and should not resort to even-worse workarounds to avoid doing so.

5.4.7 Getters and Setters

Không sử dụng các thuộc tính của JavaScript Getter và Setter. Họ có khả năng gây ngạc nhiên và khó khăn để lý luận, và có sự hỗ trợ hạn chế trong trình biên dịch. Cung cấp các phương pháp thông thường thay thế.

Ngoại lệ: Có những tình huống xác định một getter hoặc setter là không thể tránh khỏi (ví dụ: các khung liên kết dữ liệu như góc và polymer hoặc để tương thích với API bên ngoài không thể điều chỉnh). Trong những trường hợp này, chỉ có thể sử dụng một cách thận trọng, với điều kiện chúng được xác định với các từ khóa phương thức tốc ký

goog.module('search.urlHistory.UrlHistoryService');
03 và
goog.module('search.urlHistory.UrlHistoryService');
04 hoặc từ khóa
goog.module('search.urlHistory.UrlHistoryService');
05 (không phải
goog.module('search.urlHistory.UrlHistoryService');
06, cản trở việc đổi tên tài sản). Getters không được thay đổi trạng thái quan sát được.
: there are situations where defining a getter or setter is unavoidable (e.g. data binding frameworks such as Angular and Polymer, or for compatibility with external APIs that cannot be adjusted). In these cases only, getters and setters may be used with caution, provided they are defined with the
goog.module('search.urlHistory.UrlHistoryService');
03 and
goog.module('search.urlHistory.UrlHistoryService');
04 shorthand method keywords or
goog.module('search.urlHistory.UrlHistoryService');
05 (not
goog.module('search.urlHistory.UrlHistoryService');
06, which interferes with property renaming). Getters must not change observable state.

Disallowed:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
8

5.4.8 Ghi đè toString

Phương pháp

goog.module('search.urlHistory.UrlHistoryService');
07 có thể bị ghi đè, nhưng phải luôn thành công và không bao giờ có tác dụng phụ có thể nhìn thấy.

Mẹo: Đặc biệt, hãy cẩn thận khi gọi các phương pháp khác từ toString, vì các điều kiện đặc biệt có thể dẫn đến các vòng lặp vô hạn.

5.4.9 Giao diện

Các giao diện có thể được khai báo với

goog.module('search.urlHistory.UrlHistoryService');
08 hoặc
goog.module('search.urlHistory.UrlHistoryService');
09. Các giao diện được khai báo với
goog.module('search.urlHistory.UrlHistoryService');
09 có thể được rõ ràng (nghĩa là thông qua
goog.module('search.urlHistory.UrlHistoryService');
11) hoặc được thực hiện ngầm bởi một lớp hoặc đối tượng theo nghĩa đen.

Tất cả các thân phương thức không tĩnh trên giao diện phải là các khối trống. Các trường phải được tuyên bố là thành viên không được hưởng trong hàm tạo lớp.

Example:

const /** !Array */ exportedArray = [1, 2, 3];

const /** !Array */ moduleLocalArray = [4, 5, 6];

/** @return {number} */
function moduleLocalFunction() {
  return moduleLocalArray.length;
}

/** @return {number} */
function exportedFunction() {
  return moduleLocalFunction() * 2;
}

exports = {exportedArray, exportedFunction};
9

5.4.10 Các lớp trừu tượng

Sử dụng các lớp trừu tượng khi thích hợp. Các lớp và phương pháp trừu tượng phải được chú thích bằng

goog.module('search.urlHistory.UrlHistoryService');
12. Không sử dụng
goog.module('search.urlHistory.UrlHistoryService');
13. Xem các lớp và phương pháp trừu tượng.

5,5 chức năng

5.5.1 Chức năng cấp cao nhất

Các chức năng cấp cao nhất có thể được xác định trực tiếp trên đối tượng

.submitButton {
    margin: 0 10px;
}
95, hoặc nếu không được khai báo cục bộ và tùy chọn xuất khẩu. Nhìn thấy ?? Để biết thêm về xuất khẩu.

Examples:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
0
/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
1

5.5.2 Chức năng và đóng cửa lồng nhau

Các chức năng có thể chứa các định nghĩa chức năng lồng nhau. Nếu nó hữu ích để đặt cho chức năng một tên, nó nên được gán cho một

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36 cục bộ.

5.5.3 Hàm mũi tên

Các hàm mũi tên cung cấp một cú pháp chức năng ngắn gọn và đơn giản hóa phạm vi

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69 cho các chức năng lồng nhau. Thích các hàm mũi tên trên từ khóa
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
04, đặc biệt là cho các chức năng lồng nhau (nhưng xem ??).

Thích các hàm mũi tên hơn các phương pháp phạm vi

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69 khác như
goog.module('search.urlHistory.UrlHistoryService');
19,
goog.module('search.urlHistory.UrlHistoryService');
20 và
goog.module('search.urlHistory.UrlHistoryService');
21. Các hàm mũi tên đặc biệt hữu ích để gọi vào các cuộc gọi lại khi chúng cho phép chỉ định rõ ràng các tham số nào sẽ chuyển đến cuộc gọi lại trong khi ràng buộc sẽ chuyển qua tất cả các tham số.

Phía bên trái của mũi tên chứa số không hoặc nhiều tham số. Điểm dừng xung quanh các tham số là tùy chọn nếu chỉ có một tham số không phá hủy duy nhất. Khi dấu ngoặc đơn được sử dụng, các loại tham số nội tuyến có thể được chỉ định (xem ??).

Mẹo: Luôn sử dụng dấu ngoặc đơn ngay cả đối với các hàm mũi tên đơn có thể tránh các tình huống trong đó thêm các tham số, nhưng quên thêm dấu ngoặc đơn, có thể dẫn đến mã có thể phân tích được không còn hoạt động như dự định.

Phía bên phải của mũi tên chứa phần thân của chức năng. Theo mặc định, cơ thể là một câu lệnh khối (0 hoặc nhiều câu lệnh được bao quanh bởi niềng răng xoăn). Cơ thể cũng có thể là một biểu thức đơn được trả về ngầm nếu một trong hai: logic chương trình yêu cầu trả về một giá trị hoặc toán tử

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
23 đi trước một chức năng hoặc cuộc gọi phương thức duy nhất (sử dụng
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
23 đảm bảo
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
48 được trả về, ngăn chặn các giá trị bị rò rỉ và giao tiếp ý định). Mẫu biểu thức đơn được ưa thích nếu nó cải thiện khả năng đọc (ví dụ: đối với các biểu thức ngắn hoặc đơn giản).

Examples:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
2

Disallowed:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
3

5.5.4 Máy phát điện

Máy phát điện cho phép một số trừu tượng hữu ích và có thể được sử dụng khi cần thiết.

Khi xác định các chức năng của Trình tạo, hãy gắn

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
34 vào từ khóa
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
04 khi có mặt và tách nó ra với một khoảng trống khỏi tên của hàm. Khi sử dụng năng suất ủy quyền, hãy đính kèm từ khóa
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
29.

Example:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
4

5.5.5 Tham số và các loại trả về

Các tham số chức năng và các loại trả về thường nên được ghi lại với các chú thích JSDOC. Nhìn thấy ?? để biết thêm thông tin.

5.5.5.1 Tham số mặc định

Các tham số tùy chọn được cho phép bằng toán tử bằng trong danh sách tham số. Các tham số tùy chọn phải bao gồm các khoảng trống ở cả hai bên của toán tử bằng, được đặt tên chính xác giống như các tham số cần thiết (nghĩa là, không có tiền tố với

goog.module('search.urlHistory.UrlHistoryService');
29), sử dụng hậu tố
goog.module('search.urlHistory.UrlHistoryService');
30 trong loại JSDOC của chúng các hiệu ứng. Tất cả các tham số tùy chọn cho các hàm cụ thể phải có giá trị mặc định, ngay cả khi giá trị đó là
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
48. Trái ngược với các hàm cụ thể, các phương thức trừu tượng và giao diện phải bỏ qua các giá trị tham số mặc định.

Example:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
5

Sử dụng tham số mặc định một cách tiết kiệm. Thích phá hủy (như trong ??) để tạo API có thể đọc được khi có nhiều hơn một số ít các tham số tùy chọn không có thứ tự tự nhiên.

Lưu ý: Không giống như các tham số mặc định của Python, không sao khi sử dụng các bộ khởi tạo trả về các đối tượng có thể thay đổi mới (chẳng hạn như

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
84 hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
55) vì trình khởi tạo được đánh giá mỗi khi giá trị mặc định được sử dụng, do đó, một đối tượng sẽ không được chia sẻ qua các cuộc gọi.

Mẹo: Mặc dù các biểu thức tùy ý bao gồm các cuộc gọi chức năng có thể được sử dụng làm bộ khởi tạo, chúng nên được giữ đơn giản nhất có thể. Tránh các bộ khởi tạo hiển thị trạng thái có thể thay đổi được chia sẻ, vì điều đó có thể dễ dàng giới thiệu khớp nối ngoài ý muốn giữa các cuộc gọi chức năng.

5.5.5.2 Tham số REST

Sử dụng tham số REST thay vì truy cập

goog.module('search.urlHistory.UrlHistoryService');
34. Các tham số REST được gõ bằng tiền tố
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
54 trong JSDOC của họ. Tham số còn lại phải là tham số cuối cùng trong danh sách. Không có khoảng trống giữa
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
54 và tên tham số. Không đặt tên cho tham số REST
goog.module('search.urlHistory.UrlHistoryService');
37. Không bao giờ đặt tên cho một biến cục bộ hoặc tham số
goog.module('search.urlHistory.UrlHistoryService');
34, trong đó khó hiểu trong tên tích hợp.

Example:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
6

5.5.6 Generics

Khai báo các hàm và phương pháp chung khi cần thiết với

goog.module('search.urlHistory.UrlHistoryService');
39 trong JSDOC trên hàm hoặc định nghĩa phương thức.

5.5.7 Toán tử lây lan

Các cuộc gọi chức năng có thể sử dụng toán tử lây lan (

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
54). Thích toán tử lây lan đến
goog.module('search.urlHistory.UrlHistoryService');
41 khi một mảng hoặc có thể được giải nén thành nhiều tham số của hàm biến đổi. Không có không gian sau
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
54.

Example:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
7

5.6 Chuỗi chữ

5.6.1 Sử dụng các báo giá đơn lẻ

Các chuỗi chuỗi thông thường được phân định bằng các trích dẫn đơn (

goog.module('search.urlHistory.UrlHistoryService');
43), thay vì trích dẫn kép (
goog.module('search.urlHistory.UrlHistoryService');
44).

Mẹo: Nếu một chuỗi chứa một ký tự trích dẫn duy nhất, hãy xem xét sử dụng chuỗi mẫu để tránh phải thoát khỏi báo giá.

Chuỗi thông thường có thể không bao gồm nhiều dòng.

5.6.2 Mẫu theo nghĩa đen

Sử dụng các chữ cái mẫu (được phân định với

goog.module('search.urlHistory.UrlHistoryService');
45) trong quá trình nối chuỗi phức tạp, đặc biệt nếu có nhiều chữ viết có liên quan. Mẫu chữ có thể trải dài nhiều dòng.

Nếu một mẫu theo nghĩa đen kéo dài nhiều dòng, nó không cần phải tuân theo sự thụt của khối bao quanh, mặc dù có thể nếu khoảng trắng thêm không quan trọng.

Example:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
8

5.6.3 Không tiếp tục dòng

Không sử dụng các tiếp tục dòng (nghĩa là kết thúc một dòng bên trong một chuỗi theo nghĩa đen với một dấu gạch chéo ngược) trong các chữ viết thông thường hoặc mẫu. Mặc dù ES5 cho phép điều này, nhưng nó có thể dẫn đến các lỗi khó khăn nếu bất kỳ khoảng trắng nào xảy ra sau khi chém, và ít rõ ràng hơn đối với độc giả.

Disallowed:

/** @const {number} */
exports.CONSTANT_ONE = 1;

/** @const {string} */
exports.CONSTANT_TWO = 'Another constant';
9

Thay vào đó, hãy viết

/** @const */
exports = {exportedFunction};
0

5,7 chữ số

Số có thể được chỉ định trong thập phân, hex, bát phân hoặc nhị phân. Sử dụng chính xác các tiền tố

goog.module('search.urlHistory.UrlHistoryService');
46,
goog.module('search.urlHistory.UrlHistoryService');
47 và
goog.module('search.urlHistory.UrlHistoryService');
48, với các chữ cái viết thường, cho hex, octal và nhị phân, tương ứng. Không bao giờ bao gồm số 0 hàng đầu trừ khi nó ngay lập tức theo sau là
goog.module('search.urlHistory.UrlHistoryService');
49,
goog.module('search.urlHistory.UrlHistoryService');
50 hoặc
goog.module('search.urlHistory.UrlHistoryService');
51.

5.8 Cấu trúc điều khiển

5.8.1 cho các vòng

Với ES6, ngôn ngữ hiện có ba loại vòng

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
78 khác nhau. Tất cả có thể được sử dụng, mặc dù ____ 278 -____ ____ 328 vòng lặp nên được ưu tiên khi có thể.

________ 278 -________ 327 vòng lặp chỉ có thể được sử dụng trên các đối tượng theo kiểu Dict (xem ??), và không nên được sử dụng để lặp lại trên một mảng.

goog.module('search.urlHistory.UrlHistoryService');
57 nên được sử dụng trong ________ 278 -________ 327 vòng để loại trừ các thuộc tính nguyên mẫu không mong muốn. Thích ________ 278 -________ 328 và
goog.module('search.urlHistory.UrlHistoryService');
62 hơn ________ 278 -____ 327 khi có thể.

5.8.2 ngoại lệ

Ngoại lệ là một phần quan trọng của ngôn ngữ và nên được sử dụng bất cứ khi nào các trường hợp đặc biệt xảy ra. Luôn ném

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
66 hoặc các lớp con của
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
66: Không bao giờ ném chuỗi chữ hoặc các đối tượng khác. Luôn luôn sử dụng
goog.module('search.urlHistory.UrlHistoryService');
67 khi xây dựng
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
66.

Điều trị này mở rộng đến các giá trị từ chối

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
68 là
goog.module('search.urlHistory.UrlHistoryService');
70 tương đương với
goog.module('search.urlHistory.UrlHistoryService');
71 trong các hàm Async.

Các ngoại lệ tùy chỉnh cung cấp một cách tuyệt vời để truyền tải thông tin lỗi bổ sung từ các chức năng. Chúng nên được xác định và sử dụng bất cứ nơi nào loại

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
66 bản địa là không đủ.

Thích ném ngoại lệ hơn các phương pháp xử lý lỗi đặc biệt (chẳng hạn như truyền loại tham chiếu container lỗi hoặc trả về một đối tượng có thuộc tính lỗi).

5.8.2.1 Khối bắt trống

Thật hiếm khi chính xác khi không làm gì để đáp ứng với một ngoại lệ bị bắt. Khi nó thực sự thích hợp để không có hành động nào trong một khối bắt, lý do điều này là hợp lý được giải thích trong một bình luận.

/** @const */
exports = {exportedFunction};
1

Disallowed:

/** @const */
exports = {exportedFunction};
2

Mẹo: Không giống như trong một số ngôn ngữ khác, các mẫu như ở trên chỉ đơn giản là làm việc vì điều này sẽ bắt được lỗi được ném bởi

goog.module('search.urlHistory.UrlHistoryService');
73. Sử dụng
goog.module('search.urlHistory.UrlHistoryService');
74 thay thế.

5.8.3 Câu lệnh chuyển đổi

Thuật ngữ Lưu ý: Bên trong niềng răng của một khối chuyển đổi là một hoặc nhiều nhóm câu lệnh. Mỗi nhóm tuyên bố bao gồm một hoặc nhiều nhãn chuyển đổi (

goog.module('search.urlHistory.UrlHistoryService');
75 hoặc
goog.module('search.urlHistory.UrlHistoryService');
76), theo sau là một hoặc nhiều câu lệnh.

5.8.3.1 Fall-the Fall: Nhận xét

Trong một khối chuyển đổi, mỗi nhóm câu lệnh sẽ chấm dứt đột ngột (với ngoại lệ

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
92,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
24 hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
25N) hoặc được đánh dấu bằng nhận xét để chỉ ra rằng việc thực thi sẽ hoặc có thể tiếp tục vào nhóm câu lệnh tiếp theo. Bất kỳ nhận xét nào truyền đạt ý tưởng về sự sụp đổ là đủ (thường là
goog.module('search.urlHistory.UrlHistoryService');
80). Nhận xét đặc biệt này là không bắt buộc trong nhóm tuyên bố cuối cùng của khối chuyển đổi.

Example:

/** @const */
exports = {exportedFunction};
3
5.8.3.2 Trường hợp
goog.module('search.urlHistory.UrlHistoryService');
81 có mặt

Mỗi câu lệnh Switch bao gồm một nhóm câu lệnh

goog.module('search.urlHistory.UrlHistoryService');
81, ngay cả khi nó không chứa mã. Nhóm tuyên bố
goog.module('search.urlHistory.UrlHistoryService');
81 phải là cuối cùng.

5.9 này

Chỉ sử dụng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69 trong các hàm tạo và phương thức lớp, trong các hàm mũi tên được xác định trong các hàm tạo và phương thức lớp, hoặc trong các chức năng có
goog.module('search.urlHistory.UrlHistoryService');
85 rõ ràng được khai báo trong chức năng bao gồm ngay lập tức.

Không bao giờ sử dụng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69 để chỉ đối tượng toàn cầu, bối cảnh của
goog.module('search.urlHistory.UrlHistoryService');
87, mục tiêu của một sự kiện hoặc các hàm
goog.module('search.urlHistory.UrlHistoryService');
88ED hoặc
goog.module('search.urlHistory.UrlHistoryService');
89ed không cần thiết.

5.10 Kiểm tra bình đẳng

Sử dụng toán tử nhận dạng (________ 490/________ 491) ngoại trừ trong các trường hợp được ghi lại dưới đây.

5.10.1 Các trường hợp ngoại lệ trong đó sự ép buộc là mong muốn

Bắt cả hai giá trị

goog.module('search.urlHistory.UrlHistoryService');
92 và
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
48:

/** @const */
exports = {exportedFunction};
4

5.11 Các tính năng không được phép

5.11.1 với

Không sử dụng từ khóa

goog.module('search.urlHistory.UrlHistoryService');
94. Nó làm cho mã của bạn khó hiểu hơn và đã bị cấm ở chế độ nghiêm ngặt kể từ ES5.

5.11.2 Đánh giá mã động

Không sử dụng hàm tạo

goog.module('search.urlHistory.UrlHistoryService');
87 hoặc
goog.module('search.urlHistory.UrlHistoryService');
96 (ngoại trừ trình tải mã). Các tính năng này có khả năng nguy hiểm và đơn giản là không hoạt động trong môi trường CSP.

5.11.3 Chèn dấu chấm phẩy tự động

Luôn chấm dứt các câu lệnh với dấu chấm phẩy (ngoại trừ chức năng và khai báo lớp, như đã lưu ý ở trên).

5.11.4 Các tính năng không chuẩn

Không sử dụng các tính năng không chuẩn. Điều này bao gồm các tính năng cũ đã bị xóa (ví dụ:

goog.module('search.urlHistory.UrlHistoryService');
97), các tính năng mới chưa được chuẩn hóa (ví dụ: bản nháp làm việc TC39 hiện tại, các đề xuất ở bất kỳ giai đoạn nào hoặc các tiêu chuẩn web được đề xuất nhưng chưa hoàn thành) hoặc các tính năng độc quyền chỉ được thực hiện trong một số trình duyệt. Chỉ sử dụng các tính năng được xác định trong các tiêu chuẩn ECMA-262 hoặc WhatWG hiện tại. . Ngôn ngữ phi tiêu chuẩn Các phần mở rộng của người Viking (chẳng hạn như những người được cung cấp bởi một số người chuyển đổi bên ngoài) bị cấm.

5.11.5 Đối tượng bao bọc cho các loại nguyên thủy

Không bao giờ sử dụng

goog.module('search.urlHistory.UrlHistoryService');
67 trên các trình bao bọc đối tượng nguyên thủy (
goog.module('search.urlHistory.UrlHistoryService');
99,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
00,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
01,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
88), cũng không bao gồm chúng trong các chú thích loại.

Disallowed:

/** @const */
exports = {exportedFunction};
5

Các gói có thể được gọi là chức năng ép buộc (được ưu tiên hơn bằng cách sử dụng

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
03 hoặc nối chuỗi trống) hoặc tạo các ký hiệu.

Example:

/** @const */
exports = {exportedFunction};
6

5.11.6 Sửa đổi các đối tượng tích hợp

Không bao giờ sửa đổi các loại tích hợp, bằng cách thêm các phương thức vào các hàm tạo của chúng hoặc vào các nguyên mẫu của chúng. Tránh tùy thuộc vào các thư viện làm điều này. Lưu ý rằng thư viện thời gian chạy JSCompiler sẽ cung cấp các polyfills tuân thủ tiêu chuẩn nếu có thể; Không có gì khác có thể sửa đổi các đối tượng tích hợp.

Không thêm các ký hiệu vào đối tượng toàn cầu trừ khi thực sự cần thiết (ví dụ: yêu cầu của API của bên thứ ba).

5.11.7 Bỏ qua
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
04 khi gọi một hàm tạo

Không bao giờ gọi một hàm tạo trong một câu lệnh

goog.module('search.urlHistory.UrlHistoryService');
67 mà không sử dụng dấu ngoặc đơn
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
04.

Disallowed:

/** @const */
exports = {exportedFunction};
7

Sử dụng thay thế:

/** @const */
exports = {exportedFunction};
8

Bỏ qua dấu ngoặc đơn có thể dẫn đến những sai lầm tinh tế. Hai dòng này không tương đương:

/** @const */
exports = {exportedFunction};
9

6 Đặt tên

6.1 Quy tắc chung cho tất cả các định danh

Số nhận dạng chỉ sử dụng các chữ cái và chữ số ASCII, và, trong một số ít các trường hợp được ghi nhận dưới đây, nhấn mạnh và rất hiếm khi (khi được yêu cầu bởi các khung như Angular) Dollar Dấu hiệu.

Đặt theo mô tả một tên càng tốt, trong lý do. Đừng lo lắng về việc tiết kiệm không gian ngang vì điều quan trọng hơn là làm cho mã của bạn có thể hiểu được ngay lập tức bởi một người đọc mới. Không sử dụng các chữ viết tắt không rõ ràng hoặc không quen thuộc với độc giả bên ngoài dự án của bạn và không viết tắt bằng cách xóa các chữ cái trong một từ.

.submitButton {
    margin: 0 10px;
}
00

Disallowed:

.submitButton {
    margin: 0 10px;
}
01

6.2 Quy tắc theo loại định danh

6.2.1 Tên gói

Tên gói đều là

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04. Ví dụ:
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
08, nhưng không phải
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
09 hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
10.

6.2.2 Tên lớp

Tên lớp, giao diện, bản ghi và tên typedef được viết bằng

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
11. Các lớp không được đề cập chỉ đơn giản là người dân địa phương: chúng không được đánh dấu
.submitButton {
    margin: 0 10px;
}
97 và do đó không được đặt tên với một dấu gạch dưới.

Tên loại thường là danh từ hoặc cụm danh từ. Ví dụ:

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
13,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
14 hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
15. Ngoài ra, tên giao diện đôi khi có thể là tính từ hoặc cụm từ tính từ thay thế (ví dụ:
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
16).

6.2.3 Tên phương thức

Tên phương thức được viết trong

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04. Tên cho các phương pháp
.submitButton {
    margin: 0 10px;
}
97 phải kết thúc bằng một dấu gạch dưới.

Tên phương thức thường là động từ hoặc cụm động từ. Ví dụ,

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
19 hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
20. Các phương thức getter và setter cho các thuộc tính không bao giờ được yêu cầu, nhưng nếu chúng được sử dụng, chúng nên được đặt tên là
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
21 (hoặc tùy chọn
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
22 hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
23 cho booleans) hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
24 cho setters.

Dấu gạch dưới cũng có thể xuất hiện trong tên phương thức thử nghiệm JSunit để tách các thành phần logic của tên. Một mẫu điển hình là

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
25, ví dụ
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
26. Không có một cách chính xác để đặt tên cho các phương thức kiểm tra.

6.2.4 Tên enum

Tên enum được viết bằng

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
11, tương tự như các lớp và thường là danh từ số ít. Các mục riêng lẻ trong enum được đặt tên trong
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
28.

6.2.5 Tên không đổi

Tên không đổi Sử dụng

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
28: Tất cả các chữ cái chữ hoa, với các từ được phân tách bằng dấu gạch dưới. Không có lý do gì để một hằng số được đặt tên với một dấu gạch dưới, vì các thuộc tính tĩnh riêng có thể được thay thế bằng mô -đun (hoàn toàn riêng tư) Người dân địa phương.

6.2.5.1 Định nghĩa về "hằng số"

Mỗi hằng số là một thuộc tính tĩnh

.submitButton {
    margin: 0 10px;
}
99 hoặc khai báo mô-đun
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36, nhưng không phải tất cả các thuộc tính tĩnh
.submitButton {
    margin: 0 10px;
}
99 và mô-đun-local
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36 là hằng số. Trước khi chọn trường hợp liên tục, hãy xem xét liệu lĩnh vực này có thực sự cảm thấy như một hằng số bất biến sâu sắc hay không. Ví dụ, nếu bất kỳ trạng thái quan sát nào của trường hợp đó có thể thay đổi, thì nó gần như chắc chắn không phải là hằng số. Chỉ có ý định không bao giờ đột biến đối tượng nói chung là không đủ.

Examples:

.submitButton {
    margin: 0 10px;
}
02

Các tên hằng số thường là danh từ hoặc cụm danh từ.

6.2.5.2 Bí danh địa phương

Bí danh địa phương nên được sử dụng bất cứ khi nào chúng cải thiện khả năng đọc so với các tên đủ điều kiện đầy đủ. Thực hiện theo các quy tắc tương tự như

.submitButton {
    margin: 0 10px;
}
77s (??), duy trì phần cuối cùng của tên bí danh. Bí danh cũng có thể được sử dụng trong các chức năng. Bí danh phải là
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36.

Examples:

.submitButton {
    margin: 0 10px;
}
03

6.2.6 Tên trường không liên tục

Tên trường không liên tục (tĩnh hoặc khác) được viết bằng

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04, với một dấu gạch dưới cho các trường tư nhân.

Những tên này thường là danh từ hoặc cụm danh từ. Ví dụ,

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
37 hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
38.

6.2.7 Tên tham số

Tên tham số được viết trong

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04. Lưu ý rằng điều này áp dụng ngay cả khi tham số mong đợi một hàm tạo.

Tên tham số một ký tự không nên được sử dụng trong các phương thức công khai.

Ngoại lệ: Khi được yêu cầu bởi khung của bên thứ ba, tên tham số có thể bắt đầu bằng

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
40. Ngoại lệ này không áp dụng cho bất kỳ định danh nào khác (ví dụ: các biến hoặc thuộc tính cục bộ).: When required by a third-party framework, parameter names may begin with a
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
40. This exception does not apply to any other identifiers (e.g. local variables or properties).

6.2.8 Tên biến cục bộ

Tên biến cục bộ được viết trong

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04, ngoại trừ các hằng số mô-đun-local (cấp cao nhất), như được mô tả ở trên. Các hằng số trong phạm vi chức năng vẫn được đặt tên trong
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04. Lưu ý rằng
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
04 được sử dụng ngay cả khi biến chứa hàm tạo.

6.2.9 Tên tham số mẫu

Tên tham số mẫu phải súc tích, định danh một chữ cái hoặc một chữ cái và phải là tất cả các nắp, chẳng hạn như

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
44 hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
45.

6.2.10 Tên mô-đun địa phương

Các tên mô-đun-địa phương không được xuất khẩu là hoàn toàn riêng tư. Chúng không được đánh dấu

.submitButton {
    margin: 0 10px;
}
97 và không kết thúc trong một dấu gạch dưới. Điều này áp dụng cho các lớp, hàm, biến, hằng số, enum và các định danh mô-đun địa phương khác.

6.3 Trường hợp lạc đà: được xác định

Đôi khi có nhiều hơn một cách hợp lý để chuyển đổi một cụm từ tiếng Anh thành trường hợp lạc đà, chẳng hạn như khi các từ viết tắt hoặc các cấu trúc bất thường như IPv6 hoặc iOS có mặt. Để cải thiện khả năng dự đoán, Google Style chỉ định sơ đồ xác định (gần như) sau đây.

Bắt đầu với hình thức văn xuôi của tên:

  1. Chuyển đổi cụm từ thành ASCII đơn giản và loại bỏ bất kỳ dấu nháy đơn nào. Ví dụ, thuật toán của Müller có thể trở thành thuật toán Mueller.
  2. Chia kết quả này thành các từ, phân tách trên khoảng trống và bất kỳ dấu câu còn lại (thường là dấu gạch nối).
    1. Được đề xuất: Nếu bất kỳ từ nào đã có một trường hợp lạc đà thông thường xuất hiện trong cách sử dụng chung, hãy chia điều này thành các phần cấu thành của nó (ví dụ: AdWords trở thành từ AD). Lưu ý rằng một từ như iOS không thực sự trong trường hợp lạc đà mỗi se; Nó bất chấp bất kỳ quy ước, vì vậy khuyến nghị này không được áp dụng.
  3. Bây giờ viết thường mọi thứ (bao gồm cả từ viết tắt), sau đó chỉ có ký tự đầu tiên của:
    1. Mỗi từ, để mang lại trường hợp lạc đà phía trên, hoặc
    2. Mỗi từ ngoại trừ từ đầu tiên, để mang lại hộp lạc đà thấp hơn
  4. Cuối cùng, tham gia tất cả các từ vào một định danh duy nhất.

Lưu ý rằng vỏ của các từ gốc gần như hoàn toàn coi thường.

Examples:

Hình thức văn xuôiChính xácKhông đúng
Yêu cầu XML HTTPXmlhttprequestXmlhttprequest
ID khách hàng mớiNewcustomeridNewcustomerid
Đồng hồ bấm giờ bên trongInnStopWatchInnStopWatch
Hỗ trợ IPv6 trên iOS?Hỗ trợsipv6oniosHỗ trợsipv6onios
Nhà nhập khẩu YouTubeYouTubeImporterYouTubeImporter*

*Có thể chấp nhận, nhưng không được khuyến nghị.

Lưu ý: Một số từ bị gạch nối mơ hồ trong ngôn ngữ tiếng Anh: ví dụ: không bình thường và không trống đều chính xác, vì vậy tên phương thức CheckNonempty và CheckNonempty đều đúng.

7 JSDOC

JSDOC được sử dụng trên tất cả các lớp, trường và phương thức.

7.1 Mẫu chung

Định dạng cơ bản của các khối JSDOC được thấy trong ví dụ này:

.submitButton {
    margin: 0 10px;
}
04

hoặc trong ví dụ một dòng này:

.submitButton {
    margin: 0 10px;
}
05

Nếu một nhận xét một dòng tràn vào nhiều dòng, nó phải sử dụng kiểu đa dòng với

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
47 và
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
48 trên các dòng của riêng họ.

Nhiều công cụ trích xuất siêu dữ liệu từ các bình luận của JSDOC để thực hiện xác thực và tối ưu hóa mã. Như vậy, những ý kiến ​​này phải được hình thành tốt.must be well-formed.

7.2 Markdown

JSDOC được viết bằng Markdown, mặc dù nó có thể bao gồm HTML khi cần thiết.

Lưu ý rằng các công cụ tự động trích xuất JSDOC (ví dụ: Jsdossier) thường sẽ bỏ qua định dạng văn bản đơn giản, vì vậy nếu bạn đã làm điều này:

.submitButton {
    margin: 0 10px;
}
06

Nó sẽ ra như thế này:

.submitButton {
    margin: 0 10px;
}
07

Thay vào đó, hãy viết một danh sách đánh dấu:

.submitButton {
    margin: 0 10px;
}
08

7.3 Thẻ JSDOC

Google Style cho phép một tập hợp con của các thẻ JSDOC. Nhìn thấy ?? cho danh sách đầy đủ. Hầu hết các thẻ phải chiếm dòng riêng của chúng, với thẻ ở đầu dòng.

Disallowed:

.submitButton {
    margin: 0 10px;
}
09

Các thẻ đơn giản không yêu cầu bất kỳ dữ liệu bổ sung nào (chẳng hạn như

.submitButton {
    margin: 0 10px;
}
97,
.submitButton {
    margin: 0 10px;
}
99,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
51,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
55) có thể được kết hợp trên cùng một dòng, cùng với một loại tùy chọn khi thích hợp.

.submitButton {
    margin: 0 10px;
}
10

Không có quy tắc khó cho khi nào nên kết hợp các thẻ, hoặc theo thứ tự nào, nhưng phải nhất quán.

Để biết thông tin chung về các loại chú thích trong JavaScript, hãy xem chú thích JavaScript cho trình biên dịch đóng và các loại trong hệ thống loại đóng.

7,4 Line Gói

Thẻ khối được bọc dòng được thụt vào bốn không gian. Văn bản mô tả được bọc có thể được xếp hàng với mô tả trên các dòng trước, nhưng sự liên kết ngang này không được khuyến khích.

.submitButton {
    margin: 0 10px;
}
11

Không thụt vào khi gói mô tả

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
53 hoặc
.submitButton {
    margin: 0 10px;
}
73.

Một tập tin có thể có tổng quan về tệp cấp cao nhất. Thông báo bản quyền, thông tin tác giả và mức độ hiển thị mặc định là tùy chọn. Tổng quan về tệp thường được đề xuất bất cứ khi nào một tệp bao gồm nhiều hơn một định nghĩa lớp. Nhận xét cấp cao nhất được thiết kế để định hướng độc giả không quen thuộc với mã theo những gì trong tệp này. Nếu có, nó có thể cung cấp mô tả về nội dung của tệp và bất kỳ phụ thuộc hoặc thông tin tương thích nào. Các dòng được bọc không được thụt vào.

Example:

.submitButton {
    margin: 0 10px;
}
12

Các lớp, giao diện và bản ghi phải được ghi lại với mô tả và bất kỳ tham số mẫu nào, giao diện được triển khai, khả năng hiển thị hoặc các thẻ thích hợp khác. Mô tả lớp sẽ cung cấp cho người đọc đủ thông tin để biết cách thức và thời điểm sử dụng lớp, cũng như bất kỳ cân nhắc bổ sung nào cần thiết để sử dụng chính xác lớp. Mô tả văn bản có thể được bỏ qua trên hàm tạo. Các chú thích

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
55 và
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
91 không được sử dụng với từ khóa
goog.module('search.urlHistory.UrlHistoryService');
00 trừ khi lớp được sử dụng để khai báo
goog.module('search.urlHistory.UrlHistoryService');
08 hoặc nó mở rộng một lớp chung.

.submitButton {
    margin: 0 10px;
}
13

7.7 Nhận xét về Enum và typedef

Tất cả các enum và typedefs phải được ghi lại bằng các thẻ JSDOC thích hợp (

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
59 hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
76) trên dòng trước. Enums và typedefs công khai cũng phải có một mô tả. Các mục enum cá nhân có thể được ghi lại với nhận xét JSDOC về dòng trước.

.submitButton {
    margin: 0 10px;
}
14

Typedefs rất hữu ích để xác định các loại bản ghi ngắn hoặc bí danh cho các công đoàn, chức năng phức tạp hoặc các loại chung. Nên tránh đánh máy cho các loại hồ sơ với nhiều trường, vì chúng không cho phép ghi lại các trường riêng lẻ, cũng như không sử dụng các mẫu hoặc tham chiếu đệ quy. Đối với các loại hồ sơ lớn, thích

goog.module('search.urlHistory.UrlHistoryService');
09.

7.8 Phương pháp và nhận xét chức năng

Trong các phương thức và các hàm được đặt tên, tham số và loại trả về phải được ghi lại, ngoại trừ trong trường hợp có cùng chữ ký

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
62s, trong đó tất cả các loại bị bỏ qua. Loại
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
69 nên được ghi lại khi cần thiết. Loại trả về có thể bị bỏ qua nếu hàm không có câu lệnh
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
24 không trống.

Phương thức, tham số và mô tả trả về (nhưng không phải loại) có thể bị bỏ qua nếu chúng rõ ràng từ phần còn lại của phương thức JSDOC hoặc từ chữ ký của nó.

Mô tả phương thức bắt đầu bằng một cụm động từ mô tả những gì phương thức làm. Cụm từ này không phải là một câu bắt buộc, mà thay vào đó được viết ở người thứ ba, như thể có một phương pháp này ngụ ý ... trước nó.

Nếu một phương thức ghi đè một phương thức siêu lớp, nó phải bao gồm một chú thích

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
62. Các phương thức ghi đè kế thừa tất cả các chú thích JSDOC từ phương thức siêu lớp (bao gồm các chú thích khả năng hiển thị) và chúng nên được bỏ qua trong phương thức ghi đè. Tuy nhiên, nếu bất kỳ loại nào được tinh chỉnh trong các chú thích loại, tất cả các chú thích
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
66 và
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
67 phải được chỉ định rõ ràng.

.submitButton {
    margin: 0 10px;
}
15

Nếu bạn chỉ cần ghi lại các loại tham số và trả về của một hàm, bạn có thể tùy ý sử dụng JSDOCs nội tuyến trong chữ ký của hàm. Các JSDocs nội tuyến này chỉ định các loại trả về và các loại param mà không có thẻ.

.submitButton {
    margin: 0 10px;
}
16

Nếu bạn cần mô tả hoặc thẻ, hãy sử dụng một nhận xét JSDOC duy nhất ở trên phương thức. Ví dụ: các phương thức trả về giá trị cần thẻ

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
67.

.submitButton {
    margin: 0 10px;
}
17
.submitButton {
    margin: 0 10px;
}
18

Trong các chú thích chức năng ẩn danh thường là tùy chọn. Nếu suy luận loại tự động không đủ hoặc chú thích rõ ràng sẽ cải thiện khả năng đọc, thì hãy chú thích các loại tham số và trả về như thế này:

.submitButton {
    margin: 0 10px;
}
19

Đối với biểu thức loại chức năng, xem ??.

Các loại tài sản phải được ghi lại. Mô tả có thể được bỏ qua cho các thuộc tính riêng tư, nếu tên và loại cung cấp đủ tài liệu để hiểu mã.

Các hằng số xuất khẩu công khai được bình luận giống như các thuộc tính.

.submitButton {
    margin: 0 10px;
}
20

7.10 Loại chú thích

Các chú thích loại được tìm thấy trên

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
66,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
67,
goog.module('search.urlHistory.UrlHistoryService');
85 và
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
72 và tùy chọn trên
.submitButton {
    margin: 0 10px;
}
99,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
52 và bất kỳ thẻ khả năng hiển thị nào. Loại chú thích gắn liền với các thẻ JSDOC phải luôn được đặt trong niềng răng.

7.10.1 Khả năng vô hiệu

Hệ thống loại xác định các sửa đổi

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
75 và
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
76 cho không có null và nullable, tương ứng. Những sửa đổi này phải đi trước loại.

Bộ điều chỉnh khả năng vô hiệu hóa có các yêu cầu khác nhau cho các loại khác nhau, thuộc hai loại rộng:

  1. Loại chú thích cho các nguyên thủy (
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    77,
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    78,
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    79,
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    80,
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    48,
    goog.module('search.urlHistory.UrlHistoryService');
    
    92) và các chữ (
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    83 và
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    84) luôn không thể chấp nhận được theo mặc định. Sử dụng công cụ sửa đổi
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    76 để làm cho nó vô hiệu hóa, nhưng bỏ qua
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    75 dự phòng.
  2. Các loại tham chiếu (nói chung, bất cứ điều gì trong
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    11, bao gồm
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    88) đề cập đến một lớp, enum, bản ghi hoặc typedef được xác định ở nơi khác. Vì các loại này có thể hoặc không thể vô hiệu hóa, nên không thể biết từ tên đó cho dù nó có thể không có được hay không. Luôn luôn sử dụng các sửa đổi
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    76 và
    goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
    goog.module('foo.bar.baz');
    
    75 rõ ràng cho các loại này để ngăn chặn sự mơ hồ tại các trang web sử dụng.

Bad:

.submitButton {
    margin: 0 10px;
}
21

Good:

.submitButton {
    margin: 0 10px;
}
22

7.10.2 loại đúc

Trong trường hợp trình biên dịch không suy ra chính xác loại biểu thức và các chức năng khẳng định trong goog.asserts không thể khắc phục nó, có thể thắt chặt loại bằng cách thêm nhận xét chú thích loại và đặt biểu thức trong ngoặc đơn. Lưu ý rằng dấu ngoặc đơn được yêu cầu.

.submitButton {
    margin: 0 10px;
}
23

7.10.3 Các loại tham số mẫu

Luôn chỉ định tham số mẫu. Bằng cách này, trình biên dịch có thể làm một công việc tốt hơn và nó giúp người đọc dễ hiểu hơn về mã.

Bad:

.submitButton {
    margin: 0 10px;
}
24

Good:

.submitButton {
    margin: 0 10px;
}
25

Các trường hợp không nên sử dụng tham số mẫu: không nên sử dụng:

  • /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    53 được sử dụng cho phân cấp loại và không như cấu trúc giống như bản đồ.

7.10.4 Biểu thức loại chức năng

Thuật ngữ Lưu ý: Biểu thức loại chức năng đề cập đến một chú thích loại cho các loại chức năng với từ khóa

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
04 trong chú thích (xem ví dụ bên dưới).: function type expression refers to a type annotation for function types with the keyword
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
04 in the annotation (see examples below).

Trong đó định nghĩa hàm được đưa ra, không sử dụng biểu thức loại chức năng. Chỉ định tham số và các loại trả về với

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
66 và
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
67 hoặc với các chú thích nội tuyến (xem ??). Điều này bao gồm các hàm và hàm ẩn danh được xác định và gán cho một const (trong đó hàm JSDOC xuất hiện trên toàn bộ biểu thức gán).

Các biểu thức loại chức năng là cần thiết, ví dụ, bên trong

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
59,
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
66 hoặc
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
67. Sử dụng nó cũng cho các biến hoặc thuộc tính của loại chức năng, nếu chúng không được khởi tạo ngay lập tức với định nghĩa hàm.

.submitButton {
    margin: 0 10px;
}
26

Khi sử dụng biểu thức loại chức năng, luôn chỉ định loại trả về một cách rõ ràng. Mặt khác, loại trả lại mặc định không rõ (

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
76), dẫn đến hành vi kỳ lạ và bất ngờ, và hiếm khi những gì thực sự mong muốn.

Xấu - loại lỗi, nhưng không có cảnh báo nào được đưa ra:

.submitButton {
    margin: 0 10px;
}
27

Good:

.submitButton {
    margin: 0 10px;
}
28

7.10.5 Whitespace

Trong một chú thích loại, cần có một khoảng trống hoặc ngắt dòng sau mỗi dấu phẩy hoặc đại tràng. Các lần ngắt dòng bổ sung có thể được chèn để cải thiện khả năng đọc hoặc tránh vượt quá giới hạn cột. Những lần nghỉ này nên được chọn và thụt vào theo các hướng dẫn hiện hành (ví dụ: ?? và ??). Không có khoảng trắng nào khác được phép trong các chú thích loại.

Good:

.submitButton {
    margin: 0 10px;
}
29

Bad:

.submitButton {
    margin: 0 10px;
}
30

7.11 Chú thích khả năng hiển thị

Chú thích khả năng hiển thị (

.submitButton {
    margin: 0 10px;
}
97,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
82,
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
81) có thể được chỉ định trong một khối
.submitButton {
    margin: 0 10px;
}
73 hoặc trên bất kỳ biểu tượng hoặc thuộc tính được xuất nào. Không chỉ định khả năng hiển thị cho các biến cục bộ, cho dù trong một hàm hoặc ở cấp cao nhất của mô -đun. Tất cả các tên
.submitButton {
    margin: 0 10px;
}
97 phải kết thúc với một dấu gạch dưới.

8 chính sách

8.1 Các vấn đề không được xác định bởi Google Style: Hãy nhất quán!

Đối với bất kỳ câu hỏi phong cách nào không được giải quyết dứt khoát bởi đặc điểm kỹ thuật này, thích làm những gì mã khác trong cùng một tệp đã làm. Nếu điều đó không giải quyết được câu hỏi, hãy xem xét mô phỏng các tệp khác trong cùng một gói.

8.2 Cảnh báo trình biên dịch

8.2.1 Sử dụng bộ cảnh báo tiêu chuẩn

Càng xa các dự án có thể nên sử dụng

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
04.

8.2.2 Cách xử lý cảnh báo

Trước khi làm bất cứ điều gì, hãy chắc chắn rằng bạn hiểu chính xác những gì cảnh báo đang nói với bạn. Nếu bạn không tích cực tại sao một cảnh báo xuất hiện, hãy yêu cầu giúp đỡ.

Khi bạn hiểu cảnh báo, hãy thử các giải pháp sau theo thứ tự:

  1. Đầu tiên, sửa nó hoặc làm việc xung quanh nó. Thực hiện một nỗ lực mạnh mẽ để thực sự giải quyết cảnh báo, hoặc tìm một cách khác để hoàn thành nhiệm vụ hoàn toàn tránh được tình huống. Make a strong attempt to actually address the warning, or find another way to accomplish the task that avoids the situation entirely.
  2. Nếu không, hãy xác định xem đó có phải là báo động sai hay không. Nếu bạn bị thuyết phục rằng cảnh báo là không hợp lệ và mã thực sự an toàn và chính xác, hãy thêm một nhận xét để thuyết phục người đọc về thực tế này và áp dụng chú thích
    goog.module('my.test.helpers');
    goog.module.declareLegacyNamespace();
    goog.setTestOnly();
    
    05.
    If you are convinced that the warning is invalid and that the code is actually safe and correct, add a comment to convince the reader of this fact and apply the
    goog.module('my.test.helpers');
    goog.module.declareLegacyNamespace();
    goog.setTestOnly();
    
    05 annotation.
  3. Nếu không, để lại một bình luận todo. Đây là một phương sách cuối cùng. Nếu bạn làm điều này, đừng đàn áp cảnh báo. Cảnh báo nên được nhìn thấy cho đến khi nó có thể được chăm sóc đúng cách. This is a last resort. If you do this, do not suppress the warning. The warning should be visible until it can be taken care of properly.

8.2.3 Bị cảnh báo ở phạm vi hợp lý hẹp nhất

Các cảnh báo bị triệt tiêu ở phạm vi hợp lý hẹp nhất, thường là của một biến cục bộ hoặc phương pháp rất nhỏ. Thường thì một biến hoặc phương pháp được trích xuất chỉ vì lý do đó.

Thí dụ

.submitButton {
    margin: 0 10px;
}
31

Ngay cả một số lượng lớn các đàn áp trong một lớp vẫn tốt hơn so với việc làm mờ toàn bộ lớp với loại cảnh báo này.

8.3 Khấu hao

Đánh dấu các phương thức, lớp hoặc giao diện không dùng nữa với các chú thích

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
06. Một bình luận không nhận được bao gồm các hướng đơn giản, rõ ràng để mọi người sửa chữa các trang web cuộc gọi của họ.

8.4 Mã không theo kiểu Google

Thỉnh thoảng bạn sẽ gặp các tệp trong cơ sở mã không có phong cách Google thích hợp. Những điều này có thể đến từ việc mua lại, hoặc có thể đã được viết trước khi Google Style có một vị trí về một số vấn đề hoặc có thể theo phong cách không google vì bất kỳ lý do nào khác.

8.4.1 Định dạng lại mã hiện có

Khi cập nhật phong cách của mã hiện có, hãy làm theo các hướng dẫn này.

  1. Không bắt buộc phải thay đổi tất cả các mã hiện có để đáp ứng các hướng dẫn kiểu hiện tại. Định dạng lại mã hiện tại là sự đánh đổi giữa mã hóa và tính nhất quán. Các quy tắc phong cách phát triển theo thời gian và các loại điều chỉnh này để duy trì sự tuân thủ sẽ tạo ra sự khuấy động không cần thiết. Tuy nhiên, nếu những thay đổi đáng kể đang được thực hiện đối với một tệp, dự kiến ​​rằng tệp sẽ theo kiểu Google.
  2. Hãy cẩn thận để không cho phép các sửa chữa phong cách cơ hội để xử lý sự tập trung của CL. Nếu bạn thấy mình thực hiện nhiều thay đổi về phong cách mà không quan trọng đối với trọng tâm của CL, hãy thúc đẩy những thay đổi đó thành một CL riêng biệt.

8.4.2 Mã mới được thêm vào: Sử dụng Google Style

Các tệp hoàn toàn mới sử dụng Google Style, bất kể lựa chọn kiểu của các tệp khác trong cùng một gói.

Khi thêm mã mới vào một tệp không có theo kiểu Google, việc định dạng lại mã hiện tại trước tiên được khuyến nghị, theo lời khuyên trong ??.

Nếu định dạng lại này không được thực hiện, thì mã mới sẽ nhất quán nhất có thể với mã hiện có trong cùng một tệp, nhưng không được vi phạm hướng dẫn kiểu.

8.5 Quy tắc phong cách địa phương

Các nhóm và dự án có thể áp dụng các quy tắc phong cách bổ sung ngoài các quy tắc trong tài liệu này, nhưng phải chấp nhận rằng các thay đổi dọn dẹp có thể không tuân thủ các quy tắc bổ sung này và không được chặn các thay đổi dọn dẹp đó do vi phạm bất kỳ quy tắc bổ sung nào. Cẩn thận với các quy tắc quá mức mà không có mục đích. Hướng dẫn phong cách không tìm cách xác định phong cách trong mọi kịch bản có thể và bạn cũng không nên.

8.6 Mã được tạo: Chủ yếu là được miễn trừ

Mã nguồn được tạo bởi quy trình xây dựng không bắt buộc phải theo kiểu Google. Tuy nhiên, bất kỳ định danh được tạo nào sẽ được tham chiếu từ mã nguồn viết tay phải tuân theo các yêu cầu đặt tên. Là một ngoại lệ đặc biệt, các định danh như vậy được phép chứa dấu gạch dưới, điều này có thể giúp tránh xung đột với các định danh viết tay.

9 Phụ lục

9.1 Tham khảo thẻ JSDOC

JSDOC phục vụ nhiều mục đích trong JavaScript. Ngoài việc được sử dụng để tạo tài liệu, nó cũng được sử dụng để kiểm soát dụng cụ. Được biết đến nhiều nhất là chú thích loại trình biên dịch đóng cửa.

9.1.1 Chú thích loại và các chú thích trình biên dịch đóng khác

Tài liệu cho JSDOC được sử dụng bởi trình biên dịch đóng được mô tả trong chú thích JavaScript cho trình biên dịch đóng và các loại trong hệ thống loại đóng.

9.1.2 Chú thích tài liệu

Ngoài JSDOC được mô tả trong chú thích JavaScript cho trình biên dịch đóng, các thẻ sau đây là phổ biến và được hỗ trợ tốt bởi các công cụ tạo tài liệu khác nhau (như JSDossier) cho mục đích tài liệu thuần túy.

Bạn cũng có thể thấy các loại chú thích JSDOC khác trong mã của bên thứ ba. Các chú thích này xuất hiện trong tham chiếu thẻ bộ công cụ JSDOC nhưng không được coi là một phần của Google Style hợp lệ.

9.1.2.1
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
07 hoặc
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
08 - không được khuyến nghị.

Không được khuyến khích.

Cú pháp:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
09

.submitButton {
    margin: 0 10px;
}
32

Tài liệu là tác giả của một tệp hoặc chủ sở hữu của một bài kiểm tra, thường chỉ được sử dụng trong nhận xét

.submitButton {
    margin: 0 10px;
}
73. Thẻ
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
08 được sử dụng bởi bảng điều khiển kiểm tra đơn vị để xác định ai sở hữu kết quả kiểm tra.

9.1.2.2
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
12

Cú pháp:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
13

.submitButton {
    margin: 0 10px;
}
33

Cho biết những gì các lỗi Các thử nghiệm hồi quy chức năng thử nghiệm đã cho.

Mỗi lỗi nên có dòng

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
12 của riêng mình, để làm cho việc tìm kiếm các bài kiểm tra hồi quy dễ dàng nhất có thể.

9.1.2.3
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
15 - Không dùng nữa. Không được dùng.

Phản đối. Không được dùng. Sử dụng dấu backticks Markdown thay thế.

Cú pháp:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
16

Trong lịch sử,

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
17 được viết là
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
18.

.submitButton {
    margin: 0 10px;
}
34

Chỉ ra rằng một thuật ngữ trong mô tả JSDOC là mã để nó có thể được định dạng chính xác trong tài liệu được tạo.

9.1.2.4
goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
53

Cú pháp:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
20

.submitButton {
    margin: 0 10px;
}
35
9.1.2.5
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
21

Cú pháp:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
22

Thẻ này được sử dụng để tạo các liên kết tham chiếu chéo trong tài liệu được tạo.

.submitButton {
    margin: 0 10px;
}
36

Lưu ý lịch sử: Các thẻ @link cũng đã được sử dụng để tạo các liên kết bên ngoài trong tài liệu được tạo. Đối với các liên kết bên ngoài, thay vào đó, hãy luôn sử dụng cú pháp liên kết của Markdown: thay vào đó: @link tags have also been used to create external links in generated documentation. For external links, always use Markdown's link syntax instead:

.submitButton {
    margin: 0 10px;
}
37
9.1.2.6
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
23

Cú pháp:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
24

.submitButton {
    margin: 0 10px;
}
38

Tham chiếu Tra cứu chức năng hoặc phương thức lớp khác.

9.1.2.7
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
25

Cú pháp:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
26

.submitButton {
    margin: 0 10px;
}
39

Được sử dụng trong tệp FileOverView để cho biết trình duyệt nào được hỗ trợ bởi tệp.

9.1.3 Khung chú thích cụ thể

Các chú thích sau đây là cụ thể cho một khung cụ thể.

9.1.3.1
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
27 cho góc 1
9.1.3.2
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
28 cho polymer

https://github.com/google/closure-compiler/wiki/Polymer-Pass

9.1.4 Ghi chú về chú thích trình biên dịch đóng tiêu chuẩn

Các thẻ sau đây được sử dụng là tiêu chuẩn nhưng hiện không được chấp nhận.

9.1.4.1
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
29 - Khấu hao. Không được dùng.

Phản đối. Không được dùng. Thay vào đó, sử dụng

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
52 và/hoặc
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
90.

9.1.4.2
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
32 - Khấu hao. Không được dùng.

Phản đối. Không được dùng. Sử dụng

goog.module('foo.bar');   // 'foo.bar.qux' would be fine, though
goog.module('foo.bar.baz');
62 thay thế.

9.2 Quy tắc phong cách thường bị hiểu lầm

Dưới đây là một tập hợp các sự thật ít được biết đến hoặc thường bị hiểu lầm về phong cách Google cho JavaScript. (Sau đây là những câu nói thực; đây không phải là danh sách các huyền thoại.)

  • Cả tuyên bố bản quyền và tín dụng
    goog.module('my.test.helpers');
    goog.module.declareLegacyNamespace();
    goog.setTestOnly();
    
    07 đều không được yêu cầu trong một tệp nguồn. (Cả hai cũng không được đề xuất rõ ràng.)
  • Không có quy tắc cứng và nhanh điều chỉnh cách đặt hàng các thành viên của một lớp (??).
  • Các khối trống thường có thể được biểu diễn chính xác là
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    84, như chi tiết trong (??).
  • Chỉ thị chính của việc bao bọc dòng là: thích phá vỡ ở cấp độ cú pháp cao hơn (??).
  • Các ký tự không phải ASCII được cho phép trong các chuỗi chữ, nhận xét và JSDOC, và trên thực tế được khuyến nghị khi chúng làm cho mã dễ đọc hơn so với Escape unicode tương đương sẽ (??).

Các công cụ sau đây tồn tại để hỗ trợ các khía cạnh khác nhau của Google Style.

9.3.1 Trình biên dịch đóng

Chương trình này thực hiện kiểm tra loại và các kiểm tra, tối ưu hóa khác và các phép biến đổi khác (chẳng hạn như hạ thấp mã ECMAScript 6 đến ECMAScript 5).

9.3.2
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
74

Chương trình này định dạng lại mã nguồn JavaScript thành Google Style và cũng tuân theo một số thực tiễn định dạng không có khả năng yêu cầu nhưng thường xuyên có khả năng đọc. Đầu ra được sản xuất bởi

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
74 tuân thủ hướng dẫn kiểu.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
74 là không bắt buộc. Các tác giả được phép thay đổi đầu ra của nó và người đánh giá được phép yêu cầu những thay đổi đó; Tranh chấp được thực hiện theo cách thông thường. Tuy nhiên, Subtrees có thể chọn chọn tham gia vào việc thực thi như vậy tại địa phương.

9.3.3 Linter trình biên dịch đóng cửa

Chương trình này kiểm tra một loạt các sai lầm và chống lại.

9.3.4 Khung phù hợp

Khung tuân thủ JS là một công cụ là một phần của trình biên dịch đóng cung cấp cho các nhà phát triển một phương tiện đơn giản để chỉ định một bộ kiểm tra bổ sung để chạy so với cơ sở mã của họ trên các kiểm tra tiêu chuẩn. Ví dụ, kiểm tra sự phù hợp có thể cấm truy cập vào một thuộc tính nhất định hoặc gọi đến một chức năng nhất định hoặc thiếu thông tin loại (chưa biết).

Các quy tắc này thường được sử dụng để thực thi các hạn chế quan trọng (như xác định toàn cầu, có thể phá vỡ cơ sở mã) và các mẫu bảo mật (như sử dụng

goog.module('search.urlHistory.UrlHistoryService');
87 hoặc gán cho
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
40) hoặc lỏng lẻo hơn để cải thiện chất lượng mã.

Để biết thêm thông tin, hãy xem Tài liệu chính thức cho Khung tuân thủ JS.

9.4 Ngoại lệ cho các nền tảng kế thừa

9.4.1 Tổng quan

Phần này mô tả các ngoại lệ và các quy tắc bổ sung sẽ được tuân thủ khi cú pháp ECMAScript 6 hiện đại không có sẵn cho các tác giả mã. Các trường hợp ngoại lệ cho kiểu được đề xuất là không cần thiết khi ECMAScript 6 cú pháp là không thể và được phác thảo ở đây:

  • Việc sử dụng các khai báo
    /* Poor: the reader has no idea what character this is. */
    const units = '\u03bcs';
    
    40 được cho phép
  • Sử dụng
    goog.module('search.urlHistory.UrlHistoryService');
    
    34 được cho phép
  • Các tham số tùy chọn mà không có giá trị mặc định được cho phép

9.4.2 Sử dụng
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40

9.4.2.1
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 Khai báo không được bao gồm

Các khai báo

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 được bắt đầu đến đầu hàm, tập lệnh hoặc mô -đun kèm theo gần nhất, có thể gây ra hành vi bất ngờ, đặc biệt là với các đóng chức chức năng tham chiếu các khai báo ____340 bên trong các vòng lặp. Mã sau đây đưa ra một ví dụ:

.submitButton {
    margin: 0 10px;
}
40
9.4.2.2 Khai báo các biến càng gần càng tốt để sử dụng đầu tiên

Mặc dù các khai báo

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 được bắt đầu đến khi bắt đầu hàm kèm theo, các khai báo
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 phải càng gần càng tốt với mục đích sử dụng đầu tiên của chúng, cho mục đích dễ đọc. Tuy nhiên, không đặt khai báo
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 bên trong một khối nếu biến đó được tham chiếu bên ngoài khối. Ví dụ:

.submitButton {
    margin: 0 10px;
}
41
9.4.2.3 Sử dụng @const cho các biến hằng số

Đối với các khai báo toàn cầu trong đó từ khóa

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
36 sẽ được sử dụng, nếu có sẵn, hãy chú thích khai báo
/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 với @const thay thế (đây là tùy chọn cho các biến cục bộ).

9.4.3 Không sử dụng khai báo các chức năng phạm vi khối

Không làm điều này:not do this:

.submitButton {
    margin: 0 10px;
}
42

Trong khi hầu hết các máy ảo JavaScript được triển khai trước các khai báo chức năng hỗ trợ ECMAScript 6 trong các khối, nó không được tiêu chuẩn hóa. Việc triển khai không phù hợp với nhau và với hành vi ECMAScript 6 tiêu chuẩn hiện nay đối với khai báo chức năng phạm vi khối. ECMAScript 5 và trước chỉ cho phép khai báo chức năng trong danh sách câu lệnh gốc của tập lệnh hoặc hàm và cấm chúng một cách rõ ràng trong phạm vi khối ở chế độ nghiêm ngặt.

Để có được hành vi nhất quán, thay vào đó, hãy sử dụng

/* Poor: the reader has no idea what character this is. */
const units = '\u03bcs';
40 được khởi tạo bằng biểu thức chức năng để xác định hàm trong một khối:

.submitButton {
    margin: 0 10px;
}
43

9.4.4 Quản lý phụ thuộc với ________ 221/________ 177

9.4.4.1 Tóm tắt

CẢNH BÁO: Quản lý phụ thuộc

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 bị phản đối. Tất cả các tệp mới, ngay cả trong các dự án sử dụng
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 cho các tệp cũ hơn, nên sử dụng
.submitButton {
    margin: 0 10px;
}
69. Các quy tắc sau chỉ dành cho các tệp
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 đã tồn tại trước.
All new files, even in projects using
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 for older files, should use
.submitButton {
    margin: 0 10px;
}
69. The following rules are for pre-existing
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 files only.

  • Đặt tất cả
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    21S đầu tiên,
    .submitButton {
        margin: 0 10px;
    }
    
    77s thứ hai. Cung cấp riêng biệt từ yêu cầu với một dòng trống.
  • Sắp xếp các mục theo thứ tự bảng chữ cái (chữ hoa đầu tiên).
  • Đừng bao bọc các câu lệnh
    /* Best: perfectly clear even without a comment. */
    const units = 'μs';
    
    /* Allowed: but unnecessary as μ is a printable character. */
    const units = '\u03bcs'; // 'μs'
    
    /* Good: use escapes for non-printable characters with a comment for clarity. */
    return '\ufeff' + content;  // Prepend a byte order mark.
    
    21 và
    .submitButton {
        margin: 0 10px;
    }
    
    77. Vượt quá 80 cột nếu cần thiết.
  • Chỉ cung cấp các biểu tượng cấp cao nhất.

Các câu lệnh

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 nên được nhóm lại với nhau và đặt đầu tiên. Tất cả các tuyên bố
.submitButton {
    margin: 0 10px;
}
77 nên tuân theo. Hai danh sách nên được phân tách bằng một dòng trống.

Tương tự như các câu lệnh nhập trong các ngôn ngữ khác, các câu lệnh

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 và
.submitButton {
    margin: 0 10px;
}
77 nên được viết trong một dòng, ngay cả khi chúng vượt quá giới hạn độ dài dòng 80 cột.

Các dòng phải được sắp xếp theo thứ tự bảng chữ cái, với các chữ cái viết hoa đầu tiên:

.submitButton {
    margin: 0 10px;
}
44

Tất cả các thành viên được xác định trên một lớp phải nằm trong cùng một tệp. Chỉ các lớp cấp cao nhất nên được cung cấp trong một tệp chứa nhiều thành viên được xác định trên cùng một lớp (ví dụ: các lớp enum, lớp bên trong, v.v.).

Làm cái này:

.submitButton {
    margin: 0 10px;
}
45

Không phải cái này:

.submitButton {
    margin: 0 10px;
}
46

Các thành viên trên các không gian tên cũng có thể được cung cấp:

.submitButton {
    margin: 0 10px;
}
47
9.4.4.2 Bí danh với
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67

CẢNH BÁO:

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67 bị phản đối. Các tệp mới không nên sử dụng
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67 ngay cả trong các dự án có cách sử dụng
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67 hiện có.
New files should not use
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67 even in projects with existing
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67 usage.

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67 có thể được sử dụng để rút ngắn các tham chiếu đến các ký hiệu theo tên trong mã bằng cách sử dụng ________ 221/________ 177 Quản lý phụ thuộc.

Chỉ có thể thêm một lời mời

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67 cho mỗi tệp. Luôn luôn đặt nó trong phạm vi toàn cầu.

Lời cầu khẩn

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
75 mở đầu phải được đi trước bằng chính xác một dòng trống và tuân theo bất kỳ câu lệnh
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
21 nào, các câu lệnh
.submitButton {
    margin: 0 10px;
}
77 hoặc nhận xét cấp cao nhất. Việc gọi phải được đóng trên dòng cuối cùng trong tệp. Nối
goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
78 vào câu lệnh đóng của phạm vi. Tách xét nhận xét từ dấu chấm phẩy bằng hai không gian.

Tương tự như các không gian tên C ++, không thụt vào trong các khai báo

goog.module('my.test.helpers');
goog.module.declareLegacyNamespace();
goog.setTestOnly();
67. Thay vào đó, hãy tiếp tục từ cột 0.

Chỉ tạo bí danh cho các tên sẽ không được gán lại cho một đối tượng khác (ví dụ: hầu hết các hàm tạo, enum và không gian tên). Không làm điều này (xem bên dưới để biết cách làm bí danh một hàm tạo):

.submitButton {
    margin: 0 10px;
}
48

Tên phải giống như tài sản cuối cùng của toàn cầu mà chúng là bí danh.

.submitButton {
    margin: 0 10px;
}
49
9.4.4.3
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
28

Thích sử dụng

.submitButton {
    margin: 0 10px;
}
78 thay vì
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
28 để phá vỡ các phụ thuộc tròn giữa các tệp trong cùng một thư viện. Không giống như
.submitButton {
    margin: 0 10px;
}
77, câu lệnh
.submitButton {
    margin: 0 10px;
}
78 được phép nhập không gian tên trước khi được xác định.

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
28 vẫn có thể được sử dụng trong mã di sản để phá vỡ các tài liệu tham khảo tròn kéo dài qua các ranh giới thư viện, nhưng mã mới hơn nên được cấu trúc để tránh nó.

Các tuyên bố

/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
28 phải tuân theo các quy tắc kiểu tương tự như
.submitButton {
    margin: 0 10px;
}
77 và
.submitButton {
    margin: 0 10px;
}
78. Toàn bộ khối
/* Best: perfectly clear even without a comment. */
const units = 'μs';

/* Allowed: but unnecessary as μ is a printable character. */
const units = '\u03bcs'; // 'μs'

/* Good: use escapes for non-printable characters with a comment for clarity. */
return '\ufeff' + content;  // Prepend a byte order mark.
28,
.submitButton {
    margin: 0 10px;
}
77 và
.submitButton {
    margin: 0 10px;
}
78 được sắp xếp theo thứ tự bảng chữ cái.