当前位置: 首页 > news >正文

JavaScript 开发代码规范指南

1. 代码格式

1.1 缩进

  • 使用 2 个空格进行缩进
  • 不要混用空格和制表符
// ✅ 正确
function calculateTotal(items) {let total = 0;items.forEach(item => {total += item.price * item.quantity;});return total;
}// ❌ 错误
function calculateTotal(items) {let total = 0;  // 使用4空格或制表符items.forEach(item => {total += item.price * item.quantity;});return total;
}

1.2 分号

  • 语句结尾始终使用分号
// ✅ 正确
const name = "John";
const age = 25;// ❌ 错误
const name = "John"
const age = 25

1.3 行长度

  • 每行代码不超过 80 个字符
  • 超过时进行合理换行
// ✅ 正确
const result = calculateTotalPrice(items,taxRate,discount
);// ❌ 错误
const result = calculateTotalPrice(items, taxRate, discount, shippingCost, promotionCode);

2. 命名规范

2.1 变量和函数

  • 使用 camelCase 命名法
  • 名称应具有描述性
// ✅ 正确
let userName = "Alice";
const MAX_RETRY_COUNT = 3;function getUserInfo() {// ...
}// ❌ 错误
let un = "Alice";  // 缩写不明确
const maxretrycount = 3;
function getuserinfo() { }

2.2 类和构造函数

  • 使用 PascalCase 命名法
// ✅ 正确
class UserAccount {constructor(name, email) {this.name = name;this.email = email;}
}function DatabaseConnection() {// ...
}// ❌ 错误
class userAccount { }
function database_connection() { }

2.3 常量

  • 使用 UPPER_SNAKE_CASE
  • 仅在值真正不变时使用
// ✅ 正确
const API_BASE_URL = "https://api.example.com";
const DEFAULT_TIMEOUT = 5000;// ❌ 错误
const apiBaseUrl = "https://api.example.com";
const default_timeout = 5000;

3. 变量声明

3.1 使用 const 和 let

  • 优先使用 const
  • 需要重新赋值时使用 let
  • 避免使用 var
// ✅ 正确
const user = { name: "John" };
let count = 0;user.age = 25;  // 对象属性可以修改
count = 1;// ❌ 错误
var userName = "John";
count = 1;  // 未声明变量

3.2 变量分组

  • 相关变量应分组声明
// ✅ 正确
// DOM 元素
const form = document.getElementById("user-form");
const input = document.getElementById("user-input");
const button = document.getElementById("submit-btn");// 配置常量
const API_URL = "https://api.example.com";
const TIMEOUT = 5000;
const MAX_RETRIES = 3;// ❌ 错误
const form = document.getElementById("user-form");
const API_URL = "https://api.example.com";
const input = document.getElementById("user-input");
const TIMEOUT = 5000;

4. 函数规范

4.1 函数声明

  • 使用函数声明而非函数表达式(需要提升时)
  • 箭头函数用于匿名函数和回调
// ✅ 正确
function calculateTotal(price, quantity) {return price * quantity;
}// 回调函数使用箭头函数
const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);// ❌ 错误
const calculateTotal = function(price, quantity) {return price * quantity;
}

4.2 参数处理

  • 参数不超过 3 个,过多时使用对象参数
  • 使用默认参数替代逻辑判断
// ✅ 正确
function createUser({ name, email, age = 18, role = "user" }) {return {name,email,age,role};
}// ❌ 错误
function createUser(name, email, age, role, isActive, createdAt) {age = age || 18;role = role || "user";// ...
}

5. 对象和数组

5.1 对象字面量

  • 使用简写属性
  • 方法使用简写语法
// ✅ 正确
const name = "John";
const age = 25;const user = {name,age,getInfo() {return `${this.name} - ${this.age}`;}
};// ❌ 错误
const user = {name: name,age: age,getInfo: function() {return this.name + " - " + this.age;}
};

5.2 数组方法

  • 优先使用数组方法而非 for 循环
// ✅ 正确
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
const doubled = numbers.map(num => num * 2);// ❌ 错误
const evenNumbers = [];
for (let i = 0; i < numbers.length; i++) {if (numbers[i] % 2 === 0) {evenNumbers.push(numbers[i]);}
}

6. 异步编程

6.1 Promise 和 async/await

  • 优先使用 async/await
  • 正确处理错误
// ✅ 正确
async function fetchUserData(userId) {try {const response = await fetch(`/api/users/${userId}`);if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}return await response.json();} catch (error) {console.error("Failed to fetch user data:", error);throw error;}
}// ❌ 错误
function fetchUserData(userId) {return fetch(`/api/users/${userId}`).then(response => response.json()).catch(error => console.error(error));
}

7. 错误处理

7.1 明确的错误处理

  • 使用 try-catch 处理可能出错的代码
  • 抛出有意义的错误信息
// ✅ 正确
function parseJSON(jsonString) {try {return JSON.parse(jsonString);} catch (error) {throw new Error(`Invalid JSON: ${error.message}`);}
}class ValidationError extends Error {constructor(field, message) {super(`Validation failed for ${field}: ${message}`);this.field = field;}
}// ❌ 错误
function parseJSON(jsonString) {return JSON.parse(jsonString);  // 未处理可能的错误
}

8. 注释规范

8.1 文档注释

  • 使用 JSDoc 格式注释函数和类
  • 注释应说明目的而非实现
// ✅ 正确
/*** 计算订单总价* @param {Array} items - 订单项数组* @param {number} taxRate - 税率 (0-1)* @param {number} discount - 折扣金额* @returns {number} 订单总价*/
function calculateOrderTotal(items, taxRate = 0.1, discount = 0) {const subtotal = items.reduce((sum, item) => sum + item.price * item.quantity, 0);return (subtotal - discount) * (1 + taxRate);
}// ❌ 错误
// 计算总价
function calc(items, tax, disc) {let total = 0;// 遍历所有商品for (let i = 0; i < items.length; i++) {total += items[i].price * items[i].quantity;  // 价格乘以数量}return (total - disc) * (1 + tax);  // 减去折扣加上税
}

9. 模块化

9.1 ES6 模块

  • 使用 import/export 而非 require/module.exports
  • 明确导出和导入
// ✅ 正确 - math.js
export const PI = 3.14159;export function add(a, b) {return a + b;
}export default class Calculator {// ...
}// ✅ 正确 - app.js
import Calculator, { PI, add } from './math.js';// ❌ 错误
const PI = 3.14159;
module.exports = { PI };

10. 代码质量

10.1 单一职责

  • 函数和类应专注于单一功能
  • 避免过长的函数
// ✅ 正确
function validateEmail(email) {const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;return emailRegex.test(email);
}function sendWelcomeEmail(user) {if (!validateEmail(user.email)) {throw new Error("Invalid email address");}const emailContent = generateWelcomeEmail(user);return emailService.send(user.email, emailContent);
}// ❌ 错误
function processUser(user) {// 验证、发送邮件、更新数据库等全部混在一起if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(user.email)) {return false;}// 发送邮件逻辑...// 更新数据库逻辑...// 其他各种逻辑...
}

11. 工具和自动化

11.1 使用 ESLint

// .eslintrc.json
{"extends": ["eslint:recommended"],"rules": {"indent": ["error", 2],"quotes": ["error", "single"],"semi": ["error", "always"],"no-unused-vars": "error","no-console": "warn"},"env": {"browser": true,"es6": true}
}

11.2 使用 Prettier

// .prettierrc
{"semi": true,"trailingComma": "es5","singleQuote": true,"printWidth": 80,"tabWidth": 2
}

记住:代码是写给人看的,只是顺便让计算机执行。

http://www.hskmm.com/?act=detail&tid=35836

相关文章:

  • 2025 年深圳餐饮设计公司最新推荐排行榜: IP 化设计机构口碑甄选,助力餐饮品牌破局同质化竞争
  • [ACTF2020 新生赛]Include 1 文件包含
  • 编程语言变量的引用共享问题
  • 分析一下url的格式和windows与Linux共享文件的格式
  • 2025 年通风天窗源头厂家最新推荐:品牌定制能力、售后体系及综合实力深度测评榜单
  • 2025年唐卡装饰权威深度解析:家装行业新格局与品质承诺
  • 简略描述 MySQL 的备份及还原
  • 血战上海滩下载与安装教程(Win10/Win11完美运行版)
  • Linux中Expect脚本和Shell的脚本核心特点解析、以及比对分析和应用场景
  • 2025 长沙美食餐厅最新推荐排行榜:红记领衔老字号与新势力,湘味品质之选全解析
  • 2025年大连甘井子区优质养老机构推荐:从社区到自然的暖心之选
  • 2025 MIM 加工优质厂家推荐榜:精密零部件/金属件/金属零件/金属/金属成型MIM 加工厂家,聚焦精密制造的实力派之选
  • 2025年AI营销公司推荐:广东AI营销公司/广州AI营销公司如何以模块化服务破解企业增长困局
  • scanner
  • 2025年越南货架厂家推荐榜:立体/高位/仓储/托盘/重型/流利式/贯通式/穿梭车/模具/货架厂家,多维度解析行业实力派
  • 2025年主轴维修厂家企业推荐: 电/高速/精密/磨床/进口磨床/加工中心电/数控机床/高速电主轴维修厂家,服务商助力制造企业降本增效
  • 2025年磨床电主轴先升级推荐榜:国产/进口/内圆/外圆/无心/平面/来图定制磨床电主轴厂家,聚焦精密制造核心
  • 在写left join的时候 是大表在左侧 还是小表在左侧(二)
  • 在写left join的时候 是大表在左侧 还是小表在左侧(一)
  • 2025年变电站厂家最新推荐榜发布:聚焦高效电力解决方案,陕西四方华能电气设备有限公司领跑行业
  • 高级语言程序设计课程第二次个人作业
  • 2025精密球轴承实力厂家推荐,无锡雨露精工专注半导体设备轴承定制
  • 微信小程序域名查询系统详细介绍
  • 2025 年地铺石厂家最新推荐榜:涵盖生态/仿石/陶瓷等品类,揭秘行业口碑优质企业18厚/火烧/庭院/陶瓷地铺石厂家推荐
  • TLS1.2 和 TLS1.3的简要区别
  • [极客大挑战 2019]Havefun 1 代码审计
  • oracle查询某一天的数据,即日期条件使用
  • 2025粘度计厂家权威推荐:华宇忠宜在线旋转振动多场景精准测量
  • 2025 年合肥养老院最新推荐排行榜权威发布:甄选优质机构,深度解析医养结合优势与选择指南合肥智慧/医养结合/社区/瑶海区养老院推荐
  • Redis 哨兵模式搭建教程(基于 Docker,附完整配置与避坑指南)