大数跨境

编写更简洁、可扩展的 JavaScript 代码始于养成一些小习惯。

编写更简洁、可扩展的 JavaScript 代码始于养成一些小习惯。 索引目录
2025-12-09
0
导读:关注「索引目录」公众号,获取更多干货。

关注「索引目录」公众号,获取更多干货。

📘 JavaScript 最佳实践:使用对象参数而不是冗长的位置参数

请勿这样做 — 位置参数

当一个函数有多个参数,尤其是可选参数时,位置参数会变得令人困惑且容易出错。

反面例子

function saveUser(name, email, phone) {
  // ...
}

// ❌ Hard to read
saveUser("John", "", "9876543210");

// ❌ What is ""? Which field did we skip?

问题

  • 很难记住论证顺序
  • 传递空字符串只是为了跳过参数
  • 代码变得难以阅读且脆弱不堪。
  • 添加新的可选参数会破坏所有现有调用。

请务必这样做——使用单个对象参数

对象允许使用命名参数、可选值、默认值,并能编写更简洁的代码。

好例子

function saveUser({ name, email, phone }) {
  // ...
}

// ✅ Much clearer
saveUser({
  name: "John",
  phone: "9876543210",
});

好处

  • 无需记住顺序
  • 可选参数变得容易
  • 可扩展且不会破坏旧代码
  • 自文档化函数调用

💡 真实生产案例


✔ 示例 1:API 请求处理程序

❌ 旧(位置地狱)

function fetchUsers(page, limit, search, sortBy, direction) {
  // ...
}

fetchUsers(1, 20, "", "name", "asc");

✅ 新增(对象参数)

function fetchUsers({
  page = 1,
  limit = 20,
  search = "",
  sortBy = "name",
  direction = "asc",
}) {
  // ...
}

fetchUsers({
  search: "john",
  direction: "desc",
});

✔ 示例 2:Vue/React 组件工具

❌ 反模式

function openModal(title, content, showClose, size) { }
openModal("Delete?", "Are you sure?", true, "lg");

✅ 简洁的图案

function openModal({
  title,
  content,
  showClose = true,
  size = "md",
}) {}

openModal({
  title: "Delete?",
  content: "Are you sure?",
  size: "lg",
});

✔ 示例 3:生产环境中的日志记录

❌ 错误

log("error", "Database failed", false, Date.now());

✅ 正确

log({
  level: "error",
  message: "Database failed",
  showAlert: false,
  timestamp: Date.now(),
});

✔ 示例 4:效用函数

❌ 差

function calculatePrice(price, discount, tax, includeGST) {}

calculatePrice(1000, 0, 5, true);

✅ 好

function calculatePrice({
  price,
  discount = 0,
  tax = 5,
  includeGST = false,
}) {}

calculatePrice({
  price: 1000,
});

💼 可直接用于生产的模板(可重复使用)

/**
 * @description Generic best-practice function with object params.
 */
function doTask({
  required,
  optional1 = "",
  optional2 = null,
  enabled = true,
}) {
  // function logic
}

// Usage:
doTask({
  required: "value",
  enabled: false,
});

关注「索引目录」公众号,获取更多干货。



【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读12
粉丝0
内容444