JavaScript 中的 Clean Code:编写整洁代码的原则

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript中的整洁代码:原则与示例



整洁代码(Clean Code)不仅仅是一个时髦术语,而是一种使程序清晰易懂、易于维护和扩展的基础开发方法。在JavaScript和Node.js的世界中,项目快速成长且需要频繁变更,整洁代码原则变得尤为重要。本文将通过具体示例,分析编写JavaScript整洁代码的关键实践,帮助您提升项目质量。



1. 变量和函数的正确命名



变量或函数的名称应回答"这是什么?"和"它做什么?"的问题。避免使用单字母名称(循环计数器除外)和含义不明确的缩写。



反面示例:

const d = new Date();const a = [];const fn = (x, y) => x + y;


正面示例:

const currentDate = new Date();const userList = [];const calculateSum = (firstNumber, secondNumber) => firstNumber + secondNumber;


命名规则:

  • 变量和函数使用camelCase命名法。
  • 布尔值使用前缀:is、has、should(例如isActive、hasPermission)。
  • 函数用动词命名:getUser、sendEmail、validateInput。
  • 避免缩写:usr → user,conf → configuration。


2. 短小且单一职责的函数



每个函数应只完成一项任务。如果函数执行多个操作,应将其拆分为多个函数。这能提升可读性和可测试性。



反面示例(一个函数同时做三件事):

function processUserData(user) {  // 验证  if (!user.email || !user.password) {    throw new Error('Invalid data');  }  // 格式化  const formattedUser = {    email: user.email.toLowerCase(),    password: hashPassword(user.password)  };  // 保存到数据库  db.save(formattedUser);  return formattedUser;}


正面示例(拆分为独立函数):

function validateUserInput(user) {  if (!user.email || !user.password) {    throw new Error('Email and password are required');  }}

function formatUserData(user) { return { email: user.email.toLowerCase(), password: hashPassword(user.password) };}

function saveUserToDatabase(user) { return db.save(user);}

function processUserData(user) { validateUserInput(user); const formattedUser = formatUserData(user); return saveUserToDatabase(formattedUser);}


这种方法使代码具备自文档化特性,并简化了错误排查过程。



3. 错误处理和边界情况



整洁代码必须包含错误处理并考虑边界情况。不要给意外故障留下空间。



反面示例(无错误处理):

function getUserAge(user) {  return user.age; // 如果user或user.age为undefined,则会出错}


正面示例(带保护措施):

function getUserAge(user) {  if (!user || typeof user.age !== 'number') {    return null; // 或 throw new Error('Invalid user data')  }  return user.age;}


错误处理原则:

  • 对异步操作使用try/catch(尤其在Node.js中)。
  • 为不同情况创建自定义错误类。
  • 不要静默吞咽错误——记录日志或向上传递。


class ValidationError extends Error {  constructor(message)                

博客

书籍推荐