代码规范

代码规范概述

代码规范是编写高质量、可维护代码的基础。良好的代码规范能提高代码可读性、减少错误、便于团队协作。

东巴文(db-w.cn) 认为:代码规范不仅是技术要求,更是专业素养的体现,规范的代码是给未来的自己和他人最好的礼物。

HTML规范

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="HTML代码规范示例 - 东巴文">
    <meta name="keywords" content="HTML, 代码规范, 最佳实践">
    <meta name="author" content="东巴文">
    <title>HTML代码规范 - 东巴文</title>
    
    <!-- 外部样式表 -->
    <link rel="stylesheet" href="styles.css">
    
    <style>
        body {
            font-family: 'Segoe UI', sans-serif;
            padding: 20px;
            background: #f5f5f5;
        }
        
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            padding: 30px;
            border-radius: 10px;
        }
        
        h1 {
            color: #667eea;
            margin-bottom: 20px;
        }
        
        h2 {
            color: #764ba2;
            margin: 30px 0 15px;
            border-left: 4px solid #764ba2;
            padding-left: 15px;
        }
        
        /* 规范演示 */
        .demo-box {
            background: #f8f9fa;
            padding: 20px;
            border: 2px solid #ddd;
            margin: 20px 0;
            border-radius: 5px;
        }
        
        .good-example {
            background: #d4edda;
            border-color: #28a745;
            padding: 15px;
            margin: 10px 0;
            border-radius: 5px;
        }
        
        .bad-example {
            background: #f8d7da;
            border-color: #dc3545;
            padding: 15px;
            margin: 10px 0;
            border-radius: 5px;
        }
        
        /* 代码块 */
        .code-block {
            background: #f8f9fa;
            padding: 15px;
            border-radius: 5px;
            border-left: 3px solid #667eea;
            margin: 10px 0;
            font-family: 'Courier New', monospace;
            overflow-x: auto;
            font-size: 14px;
        }
        
        /* 表格 */
        .info-table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
        }
        
        .info-table th,
        .info-table td {
            padding: 12px;
            text-align: left;
            border: 1px solid #ddd;
        }
        
        .info-table th {
            background: #667eea;
            color: white;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>HTML代码规范</h1>
        
        <h2>1. 文档类型声明</h2>
        <div class="good-example">
            <strong>✓ 推荐:</strong>
            <div class="code-block">
                &lt;!DOCTYPE html&gt;<br>
                &lt;html lang="zh-CN"&gt;
            </div>
        </div>
        
        <h2>2. 字符编码</h2>
        <div class="good-example">
            <strong>✓ 推荐:</strong>
            <div class="code-block">
                &lt;meta charset="UTF-8"&gt;
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
            </div>
        </div>
        
        <h2>3. 语义化标签</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用语义化标签</strong>
            <div class="code-block">
                &lt;header&gt;头部&lt;/header&gt;<br>
                &lt;nav&gt;导航&lt;/nav&gt;<br>
                &lt;main&gt;主要内容&lt;/main&gt;<br>
                &lt;article&gt;文章&lt;/article&gt;<br>
                &lt;section&gt;区块&lt;/section&gt;<br>
                &lt;aside&gt;侧边栏&lt;/aside&gt;<br>
                &lt;footer&gt;页脚&lt;/footer&gt;
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:滥用div</strong>
            <div class="code-block">
                &lt;div class="header"&gt;头部&lt;/div&gt;<br>
                &lt;div class="nav"&gt;导航&lt;/div&gt;<br>
                &lt;div class="main"&gt;主要内容&lt;/div&gt;
            </div>
        </div>
        
        <h2>4. 属性顺序</h2>
        <p>建议按以下顺序排列属性:</p>
        <div class="code-block">
            &lt;input<br>
            &nbsp;&nbsp;type="text"<br>
            &nbsp;&nbsp;id="username"<br>
            &nbsp;&nbsp;name="username"<br>
            &nbsp;&nbsp;class="form-control"<br>
            &nbsp;&nbsp;placeholder="请输入用户名"<br>
            &nbsp;&nbsp;required&gt;
        </div>
        
        <table class="info-table">
            <thead>
                <tr>
                    <th>顺序</th>
                    <th>属性类型</th>
                    <th>示例</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>1</td>
                    <td>class</td>
                    <td>class="container"</td>
                </tr>
                <tr>
                    <td>2</td>
                    <td>id, name</td>
                    <td>id="main", name="email"</td>
                </tr>
                <tr>
                    <td>3</td>
                    <td>data-*</td>
                    <td>data-id="123"</td>
                </tr>
                <tr>
                    <td>4</td>
                    <td>src, href, type</td>
                    <td>src="image.jpg", href="#"</td>
                </tr>
                <tr>
                    <td>5</td>
                    <td>其他属性</td>
                    <td>placeholder, required</td>
                </tr>
            </tbody>
        </table>
        
        <h2>5. 布尔属性</h2>
        <div class="good-example">
            <strong>✓ 推荐:布尔属性不需要赋值</strong>
            <div class="code-block">
                &lt;input type="text" required&gt;<br>
                &lt;input type="checkbox" checked&gt;<br>
                &lt;button disabled&gt;按钮&lt;/button&gt;<br>
                &lt;option selected&gt;选项&lt;/option&gt;
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                &lt;input type="text" required="required"&gt;<br>
                &lt;input type="checkbox" checked="checked"&gt;
            </div>
        </div>
        
        <h2>6. 自闭合标签</h2>
        <div class="good-example">
            <strong>✓ 推荐:</strong>
            <div class="code-block">
                &lt;img src="image.jpg" alt="图片"&gt;<br>
                &lt;br&gt;<br>
                &lt;hr&gt;<br>
                &lt;input type="text"&gt;<br>
                &lt;meta charset="UTF-8"&gt;
            </div>
        </div>
        
        <h2>7. 图片必须有alt属性</h2>
        <div class="good-example">
            <strong>✓ 推荐:</strong>
            <div class="code-block">
                &lt;img src="logo.png" alt="东巴文Logo"&gt;<br>
                &lt;img src="photo.jpg" alt="产品照片 - 智能手机"&gt;
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                &lt;img src="logo.png"&gt;<br>
                &lt;img src="photo.jpg" alt=""&gt;
            </div>
        </div>
        
        <h2>8. 缩进和格式</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用2或4个空格缩进</strong>
            <div class="code-block">
                &lt;ul&gt;<br>
                &nbsp;&nbsp;&lt;li&gt;项目1&lt;/li&gt;<br>
                &nbsp;&nbsp;&lt;li&gt;项目2&lt;/li&gt;<br>
                &nbsp;&nbsp;&lt;li&gt;项目3&lt;/li&gt;<br>
                &lt;/ul&gt;
            </div>
        </div>
        
        <div style="background: #fff3cd; padding: 15px; border-radius: 5px; margin-top: 20px;">
            <strong>东巴文提示:</strong>使用编辑器的格式化功能(如Prettier)自动格式化代码,保持代码风格一致。
        </div>
    </div>
</body>
</html>

CSS规范

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS代码规范示例</title>
    
    <style>
        /* ==================== 
           基础样式
           ==================== */
        
        body {
            font-family: 'Segoe UI', sans-serif;
            padding: 20px;
            background: #f5f5f5;
            line-height: 1.6;
        }
        
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            padding: 30px;
            border-radius: 10px;
        }
        
        h1 {
            color: #667eea;
            margin-bottom: 20px;
        }
        
        h2 {
            color: #764ba2;
            margin: 30px 0 15px;
            border-left: 4px solid #764ba2;
            padding-left: 15px;
        }
        
        /* ==================== 
           规范演示
           ==================== */
        
        .good-example {
            background: #d4edda;
            border: 2px solid #28a745;
            padding: 15px;
            margin: 10px 0;
            border-radius: 5px;
        }
        
        .bad-example {
            background: #f8d7da;
            border: 2px solid #dc3545;
            padding: 15px;
            margin: 10px 0;
            border-radius: 5px;
        }
        
        /* 代码块 */
        .code-block {
            background: #f8f9fa;
            padding: 15px;
            border-radius: 5px;
            border-left: 3px solid #667eea;
            margin: 10px 0;
            font-family: 'Courier New', monospace;
            overflow-x: auto;
            font-size: 14px;
        }
        
        /* 表格 */
        .info-table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
        }
        
        .info-table th,
        .info-table td {
            padding: 12px;
            text-align: left;
            border: 1px solid #ddd;
        }
        
        .info-table th {
            background: #667eea;
            color: white;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>CSS代码规范</h1>
        
        <h2>1. 选择器命名</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用小写字母和连字符</strong>
            <div class="code-block">
                .navigation-bar { }<br>
                .user-profile { }<br>
                .product-card { }<br>
                .btn-primary { }
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                .navigationBar { }  /* 驼峰命名 */<br>
                .userProfile { }    /* 驼峰命名 */<br>
                .product_card { }   /* 下划线 */<br>
                .btnPrimary { }     /* 驼峰命名 */
            </div>
        </div>
        
        <h2>2. 属性顺序</h2>
        <p>建议按以下顺序组织CSS属性:</p>
        <div class="code-block">
            .element {<br>
            &nbsp;&nbsp;/* 1. 定位 */<br>
            &nbsp;&nbsp;position: absolute;<br>
            &nbsp;&nbsp;top: 0;<br>
            &nbsp;&nbsp;left: 0;<br>
            &nbsp;&nbsp;z-index: 10;<br><br>
            &nbsp;&nbsp;/* 2. 盒模型 */<br>
            &nbsp;&nbsp;display: block;<br>
            &nbsp;&nbsp;width: 100px;<br>
            &nbsp;&nbsp;height: 100px;<br>
            &nbsp;&nbsp;margin: 10px;<br>
            &nbsp;&nbsp;padding: 15px;<br><br>
            &nbsp;&nbsp;/* 3. 边框和背景 */<br>
            &nbsp;&nbsp;border: 1px solid #ddd;<br>
            &nbsp;&nbsp;background: white;<br><br>
            &nbsp;&nbsp;/* 4. 文本 */<br>
            &nbsp;&nbsp;color: #333;<br>
            &nbsp;&nbsp;font-size: 16px;<br>
            &nbsp;&nbsp;text-align: center;<br><br>
            &nbsp;&nbsp;/* 5. 其他 */<br>
            &nbsp;&nbsp;cursor: pointer;<br>
            &nbsp;&nbsp;transition: all 0.3s;<br>
            }
        </div>
        
        <h2>3. 简写属性</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用简写属性</strong>
            <div class="code-block">
                .element {<br>
                &nbsp;&nbsp;margin: 10px 20px;<br>
                &nbsp;&nbsp;padding: 15px;<br>
                &nbsp;&nbsp;border: 1px solid #ddd;<br>
                &nbsp;&nbsp;background: #f5f5f5;<br>
                &nbsp;&nbsp;font: 16px/1.5 'Segoe UI', sans-serif;<br>
                }
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                .element {<br>
                &nbsp;&nbsp;margin-top: 10px;<br>
                &nbsp;&nbsp;margin-right: 20px;<br>
                &nbsp;&nbsp;margin-bottom: 10px;<br>
                &nbsp;&nbsp;margin-left: 20px;<br>
                &nbsp;&nbsp;padding-top: 15px;<br>
                &nbsp;&nbsp;padding-right: 15px;<br>
                &nbsp;&nbsp;padding-bottom: 15px;<br>
                &nbsp;&nbsp;padding-left: 15px;<br>
                }
            </div>
        </div>
        
        <h2>4. 颜色值</h2>
        <div class="good-example">
            <strong>✓ 推荐:</strong>
            <div class="code-block">
                .element {<br>
                &nbsp;&nbsp;color: #333;<br>
                &nbsp;&nbsp;background: #f5f5f5;<br>
                &nbsp;&nbsp;border-color: rgba(0, 0, 0, 0.1);<br>
                }
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                .element {<br>
                &nbsp;&nbsp;color: #333333;  /* 不需要重复 */<br>
                &nbsp;&nbsp;background: rgb(245, 245, 245);<br>
                }
            </div>
        </div>
        
        <h2>5. 值为0时不写单位</h2>
        <div class="good-example">
            <strong>✓ 推荐:</strong>
            <div class="code-block">
                .element {<br>
                &nbsp;&nbsp;margin: 0;<br>
                &nbsp;&nbsp;padding: 0 10px;<br>
                &nbsp;&nbsp;border: none;<br>
                }
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                .element {<br>
                &nbsp;&nbsp;margin: 0px;<br>
                &nbsp;&nbsp;padding: 0px 10px;<br>
                &nbsp;&nbsp;border: 0px;<br>
                }
            </div>
        </div>
        
        <h2>6. 避免使用!important</h2>
        <div class="good-example">
            <strong>✓ 推荐:通过提高选择器优先级</strong>
            <div class="code-block">
                .container .button {<br>
                &nbsp;&nbsp;background: #667eea;<br>
                }
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                .button {<br>
                &nbsp;&nbsp;background: #667eea !important;<br>
                }
            </div>
        </div>
        
        <h2>7. 注释规范</h2>
        <div class="code-block">
            /* ====================<br>
            &nbsp;&nbsp;&nbsp;区块标题<br>
            &nbsp;&nbsp;&nbsp;==================== */<br><br>
            /* 单行注释 */<br><br>
            /**<br>
            &nbsp;* 多行注释<br>
            &nbsp;* 说明:组件样式<br>
            &nbsp;* 作者:东巴文<br>
            &nbsp;* 日期:2024-01-01<br>
            &nbsp;*/
        </div>
        
        <h2>8. 媒体查询组织</h2>
        <div class="code-block">
            /* 移动优先 */<br>
            .element {<br>
            &nbsp;&nbsp;font-size: 14px;<br>
            }<br><br>
            /* 平板 */<br>
            @media (min-width: 768px) {<br>
            &nbsp;&nbsp;.element {<br>
            &nbsp;&nbsp;&nbsp;&nbsp;font-size: 16px;<br>
            &nbsp;&nbsp;}<br>
            }<br><br>
            /* 桌面 */<br>
            @media (min-width: 992px) {<br>
            &nbsp;&nbsp;.element {<br>
            &nbsp;&nbsp;&nbsp;&nbsp;font-size: 18px;<br>
            &nbsp;&nbsp;}<br>
            }
        </div>
        
        <div style="background: #fff3cd; padding: 15px; border-radius: 5px; margin-top: 20px;">
            <strong>东巴文提示:</strong>使用CSS预处理器(如Sass、Less)可以更好地组织代码,使用变量、嵌套和混合等功能。
        </div>
    </div>
</body>
</html>

JavaScript规范

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript代码规范示例</title>
    
    <style>
        body {
            font-family: 'Segoe UI', sans-serif;
            padding: 20px;
            background: #f5f5f5;
        }
        
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            padding: 30px;
            border-radius: 10px;
        }
        
        h1 {
            color: #667eea;
            margin-bottom: 20px;
        }
        
        h2 {
            color: #764ba2;
            margin: 30px 0 15px;
            border-left: 4px solid #764ba2;
            padding-left: 15px;
        }
        
        .good-example {
            background: #d4edda;
            border: 2px solid #28a745;
            padding: 15px;
            margin: 10px 0;
            border-radius: 5px;
        }
        
        .bad-example {
            background: #f8d7da;
            border: 2px solid #dc3545;
            padding: 15px;
            margin: 10px 0;
            border-radius: 5px;
        }
        
        .code-block {
            background: #f8f9fa;
            padding: 15px;
            border-radius: 5px;
            border-left: 3px solid #667eea;
            margin: 10px 0;
            font-family: 'Courier New', monospace;
            overflow-x: auto;
            font-size: 14px;
        }
        
        .info-table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
        }
        
        .info-table th,
        .info-table td {
            padding: 12px;
            text-align: left;
            border: 1px solid #ddd;
        }
        
        .info-table th {
            background: #667eea;
            color: white;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>JavaScript代码规范</h1>
        
        <h2>1. 变量声明</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用const和let</strong>
            <div class="code-block">
                // 常量<br>
                const MAX_SIZE = 100;<br>
                const API_URL = 'https://db-w.cn/api';<br><br>
                // 变量<br>
                let count = 0;<br>
                let userName = '东巴文';
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:使用var</strong>
            <div class="code-block">
                var count = 0;<br>
                var userName = '东巴文';
            </div>
        </div>
        
        <h2>2. 命名规范</h2>
        <table class="info-table">
            <thead>
                <tr>
                    <th>类型</th>
                    <th>命名规则</th>
                    <th>示例</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>变量</td>
                    <td>小驼峰(camelCase)</td>
                    <td>userName, totalCount</td>
                </tr>
                <tr>
                    <td>常量</td>
                    <td>全大写+下划线</td>
                    <td>MAX_SIZE, API_URL</td>
                </tr>
                <tr>
                    <td>函数</td>
                    <td>小驼峰(camelCase)</td>
                    <td>getUserInfo, handleClick</td>
                </tr>
                <tr>
                    <td></td>
                    <td>大驼峰(PascalCase)</td>
                    <td>UserService, ProductCard</td>
                </tr>
                <tr>
                    <td>私有属性</td>
                    <td>下划线前缀</td>
                    <td>_privateMethod</td>
                </tr>
            </tbody>
        </table>
        
        <h2>3. 函数定义</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用箭头函数</strong>
            <div class="code-block">
                // 箭头函数<br>
                const add = (a, b) => a + b;<br><br>
                // 多行函数<br>
                const calculate = (a, b) => {<br>
                &nbsp;&nbsp;const sum = a + b;<br>
                &nbsp;&nbsp;return sum * 2;<br>
                };<br><br>
                // 对象方法<br>
                const user = {<br>
                &nbsp;&nbsp;name: '东巴文',<br>
                &nbsp;&nbsp;greet() {<br>
                &nbsp;&nbsp;&nbsp;&nbsp;return `你好,${this.name}`;<br>
                &nbsp;&nbsp;}<br>
                };
            </div>
        </div>
        
        <h2>4. 字符串</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用模板字符串</strong>
            <div class="code-block">
                const name = '东巴文';<br>
                const greeting = `你好,${name}!`;<br><br>
                // 多行字符串<br>
                const html = `<br>
                &nbsp;&nbsp;&lt;div&gt;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;${name}&lt;/h1&gt;<br>
                &nbsp;&nbsp;&lt;/div&gt;<br>
                `;
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                const name = '东巴文';<br>
                const greeting = '你好,' + name + '!';
            </div>
        </div>
        
        <h2>5. 解构赋值</h2>
        <div class="good-example">
            <strong>✓ 推荐:</strong>
            <div class="code-block">
                // 对象解构<br>
                const { name, age } = user;<br><br>
                // 数组解构<br>
                const [first, second] = items;<br><br>
                // 函数参数解构<br>
                const greet = ({ name, age }) => {<br>
                &nbsp;&nbsp;console.log(`${name}, ${age}岁`);<br>
                };
            </div>
        </div>
        
        <h2>6. 异步操作</h2>
        <div class="good-example">
            <strong>✓ 推荐:使用async/await</strong>
            <div class="code-block">
                // async/await<br>
                async function fetchData() {<br>
                &nbsp;&nbsp;try {<br>
                &nbsp;&nbsp;&nbsp;&nbsp;const response = await fetch('/api/data');<br>
                &nbsp;&nbsp;&nbsp;&nbsp;const data = await response.json();<br>
                &nbsp;&nbsp;&nbsp;&nbsp;return data;<br>
                &nbsp;&nbsp;} catch (error) {<br>
                &nbsp;&nbsp;&nbsp;&nbsp;console.error('获取数据失败:', error);<br>
                &nbsp;&nbsp;}<br>
                }
            </div>
        </div>
        
        <div class="bad-example">
            <strong>✗ 不推荐:</strong>
            <div class="code-block">
                // Promise链<br>
                function fetchData() {<br>
                &nbsp;&nbsp;return fetch('/api/data')<br>
                &nbsp;&nbsp;&nbsp;&nbsp;.then(response => response.json())<br>
                &nbsp;&nbsp;&nbsp;&nbsp;.then(data => data)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;.catch(error => {<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.error('获取数据失败:', error);<br>
                &nbsp;&nbsp;&nbsp;&nbsp;});<br>
                }
            </div>
        </div>
        
        <h2>7. 注释规范</h2>
        <div class="code-block">
            /**<br>
            &nbsp;* 函数说明<br>
            &nbsp;* @param {string} name - 用户名<br>
            &nbsp;* @param {number} age - 年龄<br>
            &nbsp;* @returns {string} 问候语<br>
            &nbsp;*/<br>
            function greet(name, age) {<br>
            &nbsp;&nbsp;// 单行注释<br>
            &nbsp;&nbsp;const message = `你好,${name}`;<br>
            &nbsp;&nbsp;return message;<br>
            }
        </div>
        
        <h2>8. 代码组织</h2>
        <div class="code-block">
            // 1. 导入模块<br>
            import { UserService } from './services';<br><br>
            // 2. 常量定义<br>
            const MAX_RETRY = 3;<br><br>
            // 3. 变量定义<br>
            let currentUser = null;<br><br>
            // 4. 函数定义<br>
            function init() {<br>
            &nbsp;&nbsp;// 初始化代码<br>
            }<br><br>
            // 5. 事件监听<br>
            document.addEventListener('DOMContentLoaded', init);<br><br>
            // 6. 导出<br>
            export { init };
        </div>
        
        <div style="background: #fff3cd; padding: 15px; border-radius: 5px; margin-top: 20px;">
            <strong>东巴文提示:</strong>使用ESLint和Prettier自动检查和格式化JavaScript代码,保持代码风格一致。
        </div>
    </div>
</body>
</html>

命名规范

通用命名原则

  1. 语义化:名称应清晰表达含义
  2. 一致性:整个项目保持统一的命名风格
  3. 简洁性:避免过长的名称
  4. 可读性:易于理解和记忆

命名规范对照表

类型 规范 示例 说明
文件名 小写+连字符 user-profile.js 多个单词用连字符分隔
类名 大驼峰 UserService 每个单词首字母大写
函数名 小驼峰 getUserInfo() 第一个单词小写,后续首字母大写
变量名 小驼峰 userName 同函数名
常量名 全大写+下划线 MAX_SIZE 全大写,单词间用下划线
CSS类名 小写+连字符 .user-profile 多个单词用连字符分隔
ID名 小驼峰或连字符 #userProfile#user-profile 保持项目一致性
私有属性 下划线前缀 _privateMethod 表示私有或内部使用

注释规范

HTML注释

<!-- 单行注释 -->

<!-- 
  多行注释
  说明:页面头部
  作者:东巴文
  日期:2024-01-01
-->

<!-- TODO: 待办事项 -->
<!-- FIXME: 需要修复的问题 -->
<!-- NOTE: 重要说明 -->

CSS注释

/* 单行注释 */

/**
 * 多行注释
 * 说明:组件样式
 * 作者:东巴文
 */

/* ====================
   区块标题
   ==================== */

JavaScript注释

// 单行注释

/*
 * 多行注释
 * 说明:功能描述
 */

/**
 * JSDoc注释
 * @param {string} name - 用户名
 * @returns {string} 问候语
 */
function greet(name) {
    return `你好,${name}`;
}

// TODO: 待办事项
// FIXME: 需要修复的问题
// HACK: 临时解决方案
// NOTE: 重要说明

代码格式化

使用Prettier

// .prettierrc
{
  "printWidth": 80,
  "tabWidth": 2,
  "useTabs": false,
  "semi": true,
  "singleQuote": true,
  "trailingComma": "es5",
  "bracketSpacing": true,
  "arrowParens": "avoid"
}

使用ESLint

// .eslintrc.js
module.exports = {
  env: {
    browser: true,
    es2021: true,
  },
  extends: [
    'eslint:recommended',
  ],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
  },
  rules: {
    'indent': ['error', 2],
    'linebreak-style': ['error', 'unix'],
    'quotes': ['error', 'single'],
    'semi': ['error', 'always'],
  },
};

最佳实践

1. 保持代码简洁

// ✓ 推荐
const isActive = user.age >= 18 && user.verified;

// ✗ 不推荐
let isActive = false;
if (user.age >= 18) {
  if (user.verified) {
    isActive = true;
  }
}

2. 避免魔法数字

// ✓ 推荐
const MAX_RETRY = 3;
for (let i = 0; i < MAX_RETRY; i++) {
  // 重试逻辑
}

// ✗ 不推荐
for (let i = 0; i < 3; i++) {
  // 重试逻辑
}

3. 函数单一职责

// ✓ 推荐
function validateEmail(email) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}

function sendEmail(email, content) {
  // 发送邮件逻辑
}

// ✗ 不推荐
function validateAndSendEmail(email, content) {
  if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
    // 发送邮件逻辑
  }
}

4. 使用有意义的变量名

// ✓ 推荐
const users = ['Alice', 'Bob', 'Charlie'];
const userCount = users.length;
const isUserLoggedIn = true;

// ✗ 不推荐
const u = ['Alice', 'Bob', 'Charlie'];
const n = u.length;
const flag = true;

学习检验

知识点测试

问题1:以下哪个变量命名符合JavaScript规范?

A. user-name B. userName C. UserName D. username

<details> <summary>点击查看答案</summary>

答案:B

东巴文解释:JavaScript变量应使用小驼峰命名法(camelCase),第一个单词小写,后续单词首字母大写。选项A包含连字符,选项C是大驼峰(用于类名),选项D虽然合法但不符合常见规范。

</details>

问题2:以下哪个CSS选择器命名最规范?

A. .navigationBar B. .navigation-bar C. .Navigation_Bar D. .NAVIGATIONBAR

<details> <summary>点击查看答案</summary>

答案:B

东巴文解释:CSS类名应使用小写字母和连字符分隔单词,这样更清晰易读。选项A使用驼峰命名,选项C混合大小写和下划线,选项D全大写不符合规范。

</details>

实践任务

任务:重构以下代码,使其符合代码规范。

// 原始代码
var x=10;
var y=20;
function calc(a,b){return a+b}
var result=calc(x,y)
console.log(result)
<details> <summary>点击查看参考答案</summary>
// 重构后的代码
const FIRST_NUMBER = 10;
const SECOND_NUMBER = 20;

/**
 * 计算两个数的和
 * @param {number} a - 第一个数
 * @param {number} b - 第二个数
 * @returns {number} 两数之和
 */
const calculateSum = (a, b) => a + b;

const result = calculateSum(FIRST_NUMBER, SECOND_NUMBER);
console.log(result);

改进说明

  1. 使用const替代var
  2. 使用有意义的变量名
  3. 添加适当的空格
  4. 添加函数注释
  5. 使用箭头函数
</details>

东巴文(db-w.cn) - 让编程学习更有趣!