| # Google JavaScript Style Guide Summary | |
| This document summarizes key rules and best practices from the Google JavaScript Style Guide. | |
| ## 1. Source File Basics | |
| - **File Naming:** All lowercase, with underscores (`_`) or dashes (`-`). Extension must be `.js`. | |
| - **File Encoding:** UTF-8. | |
| - **Whitespace:** Use only ASCII horizontal spaces (0x20). Tabs are forbidden for indentation. | |
| ## 2. Source File Structure | |
| - New files should be ES modules (`import`/`export`). | |
| - **Exports:** Use named exports (`export {MyClass};`). **Do not use default exports.** | |
| - **Imports:** Do not use line-wrapped imports. The `.js` extension in import paths is mandatory. | |
| ## 3. Formatting | |
| - **Braces:** Required for all control structures (`if`, `for`, `while`, etc.), even single-line blocks. Use K&R style ("Egyptian brackets"). | |
| - **Indentation:** +2 spaces for each new block. | |
| - **Semicolons:** Every statement must be terminated with a semicolon. | |
| - **Column Limit:** 80 characters. | |
| - **Line-wrapping:** Indent continuation lines at least +4 spaces. | |
| - **Whitespace:** Use single blank lines between methods. No trailing whitespace. | |
| ## 4. Language Features | |
| - **Variable Declarations:** Use `const` by default, `let` if reassignment is needed. **`var` is forbidden.** | |
| - **Array Literals:** Use trailing commas. Do not use the `Array` constructor. | |
| - **Object Literals:** Use trailing commas and shorthand properties. Do not use the `Object` constructor. | |
| - **Classes:** Do not use JavaScript getter/setter properties (`get name()`). Provide ordinary methods instead. | |
| - **Functions:** Prefer arrow functions for nested functions to preserve `this` context. | |
| - **String Literals:** Use single quotes (`'`). Use template literals (`` ` ``) for multi-line strings or complex interpolation. | |
| - **Control Structures:** Prefer `for-of` loops. `for-in` loops should only be used on dict-style objects. | |
| - **`this`:** Only use `this` in class constructors, methods, or in arrow functions defined within them. | |
| - **Equality Checks:** Always use identity operators (`===` / `!==`). | |
| ## 5. Disallowed Features | |
| - `with` keyword. | |
| - `eval()` or `Function(...string)`. | |
| - Automatic Semicolon Insertion. | |
| - Modifying builtin objects (`Array.prototype.foo = ...`). | |
| ## 6. Naming | |
| - **Classes:** `UpperCamelCase`. | |
| - **Methods & Functions:** `lowerCamelCase`. | |
| - **Constants:** `CONSTANT_CASE` (all uppercase with underscores). | |
| - **Non-constant Fields & Variables:** `lowerCamelCase`. | |
| ## 7. JSDoc | |
| - JSDoc is used on all classes, fields, and methods. | |
| - Use `@param`, `@return`, `@override`, `@deprecated`. | |
| - Type annotations are enclosed in braces (e.g., `/** @param {string} userName */`). | |
| *Source: [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)* |