Files
2026-07-28 22:30:20 +08:00

132 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 03-前端编码规范
## 1. HTML
### 文档结构
- **【强制】** 使用 HTML5 DOCTYPE
- **【推荐】** 指定 `<html lang="...">`
- **【推荐】** 使用 UTF-8 编码(`<meta charset="utf-8" />`
- **【推荐】** 移动端设置 viewport
### 资源加载
- **【推荐】** CSS 在 `<head>` 引入,JS 在 `</body>` 前引入
- **【推荐】** 引入 CSS/JS 无需指定 type
### 页面标题
- **【强制】** 必须有且仅有 1 个 `<title>`
### 编码风格
- **【推荐】** 2 个空格缩进
- **【强制】** HTML 注释中不允许出现任何敏感信息
- **【强制】** 标签名统一小写
- **【推荐】** 自闭合标签结尾加斜线
### 属性
- **【强制】** 属性值用双引号
- **【推荐】** Boolean 属性不添加取值
- **【推荐】** 自定义属性以 `data-` 为前缀
---
## 2. CSS
### 文件引用
- **【强制】** 一律使用 `<link>` 引入外部样式
- **【推荐】** 不要在 `<style>` 块中使用 `@import`
### 命名
- **【强制】** 由字母、中划线、数字组成,不能以数字或中划线开头
- **【强制】** 禁止拼音与英文混合,禁止中文
- **【参考】** 不依据表现形式命名,依据内容/功能命名
- **【强制】** 缩写后仍能保持原单词意思
### 编码风格
- **【强制】** 所有声明以分号结尾
- **【推荐】** 2 个空格缩进
- **【推荐】** 选择器和 `{` 之间保留一个空格
- **【推荐】** `:` 和属性值之间保留一个空格
- **【推荐】** 单行不超过 100 字符
### 属性
- **【参考】** 不要使用 id 选择器
- **【推荐】** 不使用 `!important`
- **【推荐】** 十六进制统一小写
- **【推荐】** 属性声明顺序:定位 → 盒模型 → 文字排版 → 外观 → 其他
---
## 3. JavaScript
### 变量
- **【强制】** 使用 `const``let`,禁止 `var`
### 字符串
- **【强制】** 使用单引号或反引号
- **【推荐】** 模板字符串代替拼接
### 比较
- **【强制】** `===``!==` 代替 `==``!=`
### 函数
- **【强制】** 不要定义 `arguments` 参数
- **【强制】** 不要用 `Function` 构造函数
- **【强制】** 不要在块中声明函数
- **【强制】** 不使用 `arguments` 对象,用 `...` 替代
- **【推荐】** 使用默认参数语法
- **【参考】** 圈复杂度 ≤ 10,认知复杂度 ≤ 15
### 数组/对象
- **【推荐】** 字面语法创建
- **【强制】** `map/filter/reduce` 等回调必须有 return
- **【推荐】** 使用 `...` 展开运算符
### 模块
- **【推荐】** 使用 ES6 modules
- **【强制】** 禁止重复 import 同一模块
- **【强制】** import 放到模块最上方
- **【强制】** 禁止 default import 与其他 export 同名,禁止自引用、循环引用
### 代码风格
- **【强制】** 2 个空格缩进
- **【推荐】** 添加尾随分号
- **【推荐】** 文件最大行数 1000,函数最大行数 80
- **【推荐】** 单行最大字符数 100
### 命名
- **【强制】** 避免单字母名
- **【参考】** 变量/函数用小驼峰(camelCase),类用大驼峰(PascalCase
---
## 4. TypeScript
### 类型声明
- **【强制】** interface/type 中成员分隔符统一用分号
- **【强制】** 类型声明时冒号前无空格、冒号后一个空格,箭头前后各一个空格
- **【强制】** 优先使用 `Interface` 而非 `type`
- **【强制】** interface 和 type 定义时必须声明成员类型
- **【推荐】** 简单数组用 `T[]`,复杂类型用 `Array<T>`
- **【强制】** 禁止无意义的 void 类型
### 类
- **【参考】** 为类成员声明可访问类型(public/private/protected
- **【推荐】** 字面量属性用 `readonly` 而非 getter
### 变量
- **【强制】** 不得使用 `var`
- **【推荐】** 优先用 `const`,必要时用 `let`
- **【推荐】** 如非必要不使用 `any`
- **【参考】** 优先使用 `undefined`,避免 `null`
### 断言
- **【强制】** 类型断言使用 `as Type` 语法
### 枚举
- **【参考】** 使用联合类型替代枚举,避免在新代码中使用枚举
### 其他
- **【强制】** 禁止使用三斜杠 `///` 导入
- **【强制】** 禁止使用 `namespace`
- **【强制】** 重载函数写在一起
- **【强制】** 即使是单行语句,if/else/for/while 不得省略大括号