发布于 2026-01-06 7 阅读
0

JavaScript 中的对象字面量:if / else 和 switch 的替代方案

JavaScript 中的对象字面量:if / else 和 switch 的替代方案

在 JavaScript 中,复杂的条件语句总是会导致代码冗余。然而,使用对象字面量可以避免这个问题。让我们来看看它是如何工作的。

JavaScript 中的对象字面量是用花括号括起来的、以逗号分隔的键值对列表。

假设我们有一个函数,它接受一个输入值 apassword并返回其值。如果使用 if/else 结构,代码将如下所示:

function getPassword(password) {
  if (password.toLowerCase() === "password1234") {
    return "Facebook Password";
  } else if (password.toLowerCase() === "1234Password") {
    return "Instagram Password";
  } else if (password.toLowerCase() === "!pass1234") {
    return "Twitter Password";
  } else if (password.toLowerCase() === "helloworld1234") {
    return "Github Password";
  }
  return "password not found";
}

Enter fullscreen mode Exit fullscreen mode

这段代码看起来一般。它不仅难以阅读,而且还重复调用了同一个toLowerCase()函数。

为了减少代码量,我们可以使用额外的变量或 switch 语句。

function getPassword(password) {
  switch (password.toLowerCase()) {
    case "password1234":
      return "Facebook Password";
    case "1234Password":
      return "Instagram Password";
    case "!pass1234":
      return "Twitter Password";
    case "helloworld1234":
      return "Github Password";
    default:
      return "password not found";
  }
}
Enter fullscreen mode Exit fullscreen mode

这段代码看起来更简洁,但这并非极限。此外,如果使用更复杂的条件语句,可能会意外跳过 break 语句,从而导致错误。

选择

我们可以使用对象来实现同样的功能。下面这个例子看起来更简洁:

function getPassword(password) {
  const passwords = {
    "password1234": "Facebook Password",
    "1234Password": "Instagram Password",
    "!pass1234": "Twitter Password",
    "helloworld1234": "Github Password",
  };

  return passwords[password.toLowerCase()] ?? "password not found";
}
Enter fullscreen mode Exit fullscreen mode

我们使用一个对象,其键作为条件,值作为结果。然后,我们使用方括号检查目标行是否存在。由于结果字符串可能为空或未定义,我们使用空值合并运算符(??)。这样可以排除空值,但并不排除结果为零或假的情况。


/**
 * 
 * @param string 
 * @returns boolean
 */

function stringToBool(string) {
  const checkString = {
    true: true,
    false: false,
  };

  return checkString[string] ?? "String is not a boolean value";
}
Enter fullscreen mode Exit fullscreen mode

这是一个略显牵强的例子,但它说明了如何使用 ?? 来帮助避免错误。

复杂逻辑

要组织更复杂的条件,可以使用函数作为属性值。

function calculate(num1, num2, action) {
  const actions = {
    add: (a, b) => a + b,
    subtract: (a, b) => a - b,
    multiply: (a, b) => a * b,
    divide: (a, b) => a / b,
  };

  return actions[action]?.(num1, num2) ?? "Calculation is not recognised";
}
Enter fullscreen mode Exit fullscreen mode

在这段代码中,我们通过键选择所需的函数,然后使用两个参数调用它。由于我们使用了可选链式调用,因此只有当函数存在时才会调用它。否则,将返回默认值。

输出

每种常规结构都有其特定的应用领域。对于 JavaScript 中的对象字面量而言,它们通常用于表示可以使用函数实现的长列表式条件和复杂条件。

文章来源:https://dev.to/b3ns44d/alternative-to-if-else-and-switch-object-literals-in-javascript-3nde