¥
立即购买

JavaScript条件语句生成器

9 浏览
1 试用
0 购买
Dec 8, 2025更新

本提示词专为JavaScript开发场景设计,能够根据用户提供的具体条件自动生成符合最佳实践的条件语句代码。它支持多种条件类型和复杂度级别,提供详细的代码解释和优化建议,帮助开发者快速实现业务逻辑。通过结构化的工作流程,确保生成的代码具备良好的可读性、可维护性和性能表现,适用于从简单判断到复杂业务逻辑的各种开发需求。

条件分析

生成代码

/**
 * 校验注册表单
 * @param {{ email?: string, password?: string, agreeTerms?: boolean }} form
 * @returns {{ valid: boolean, reasons: string[] }}
 */
function validateRegistration(form = {}) {
  const { email = '', password = '', agreeTerms } = form;

  // 1) Email:trim 后进行基本格式匹配
  const trimmedEmail = String(email).trim();
  const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
  const isEmailValid = emailPattern.test(trimmedEmail);

  // 2) Password:长度≥8 + 至少一个字母 + 至少一个数字
  const pwd = String(password);
  const isLongEnough = pwd.length >= 8;
  const hasLetter = /[A-Za-z]/.test(pwd);
  const hasDigit = /\d/.test(pwd);
  const isPasswordValid = isLongEnough && hasLetter && hasDigit;

  // 3) 同意条款
  const isTermsAgreed = agreeTerms === true;

  // 收集失败原因标签
  const reasons = [];
  if (!isEmailValid) reasons.push('EMAIL_INVALID_FORMAT');
  if (!isLongEnough) reasons.push('PASSWORD_TOO_SHORT');
  if (!hasLetter) reasons.push('PASSWORD_MISSING_LETTER');
  if (!hasDigit) reasons.push('PASSWORD_MISSING_NUMBER');
  if (!isTermsAgreed) reasons.push('TERMS_NOT_AGREED');

  return {
    valid: isEmailValid && isPasswordValid && isTermsAgreed,
    reasons
  };
}

代码解释

  • form = {}:为防止传入 undefined 或缺失字段,使用默认空对象。
  • 解构默认值:email、password 默认为空字符串,避免正则和 length 调用时报错。
  • trimmedEmail:仅对 email 进行 trim,再进行匹配,满足“去除首尾空格后验证”的要求。
  • emailPattern:一个简洁且实用的邮箱基本格式正则:
    • [^\s@]+ 保证本地部分无空格与 @
    • @ 分隔本地与域名
    • [^\s@]+ 域名主体允许子域
    • .[^\s@]{2,} 顶级域名至少 2 个字符
  • 密码校验:
    • isLongEnough:长度≥8
    • hasLetter:至少一个字母(A-Z 或 a-z)
    • hasDigit:至少一个数字
    • isPasswordValid:三者同时满足
  • isTermsAgreed:严格等于 true,避免将 1、"true" 等视为同意。
  • reasons:
    • 不满足的条件逐条加入标签,便于前端提示或埋点分析。
  • 返回:
    • valid:三项全部通过才为 true
    • reasons:当 valid 为 true 时为空数组;否则包含对应失败标签

优化建议

  • 标签字典化:将标签映射为可本地化的用户提示,如 const MESSAGES = { EMAIL_INVALID_FORMAT: '邮箱格式不正确', ... },在展示层做转换。
  • 预编译正则:若函数在高频场景调用,可将正则提到函数外部,避免重复创建。
  • 宽松/严格开关:可添加 options 以选择更严格的邮箱/密码策略(如要求特殊字符、禁止连续空格等)。
  • 密码空格策略:当前未对密码做 trim,避免用户有意输入空格;如需禁止空格,可增加 !/\s/.test(pwd) 校验。
  • 早返回 vs. 收集原因:当前实现同时收集全部失败原因,便于一次性展示;若只需第一个失败原因,可在首个失败时直接返回,进一步降低分支判断成本。

使用示例

// 示例1:全部通过
console.log(
  validateRegistration({
    email: '  user@example.com  ',
    password: 'abc12345',
    agreeTerms: true
  })
);
// => { valid: true, reasons: [] }

// 示例2:邮箱错 + 密码短 + 未同意
console.log(
  validateRegistration({
    email: 'bad@format',
    password: 'a1b2c',
    agreeTerms: false
  })
);
// => {
//   valid: false,
//   reasons: [
//     'EMAIL_INVALID_FORMAT',
//     'PASSWORD_TOO_SHORT',
//     'PASSWORD_MISSING_LETTER', // 若密码没有字母/数字,会同时提示
//     'PASSWORD_MISSING_NUMBER',
//     'TERMS_NOT_AGREED'
//   ]
// }

// 示例3:密码缺数字
console.log(
  validateRegistration({
    email: 'person@domain.io',
    password: 'abcdefgh',
    agreeTerms: true
  })
);
// => { valid: false, reasons: ['PASSWORD_MISSING_NUMBER'] }

条件分析

  • 核心判断链:
    • 若 route.meta.requiresAuth 为 true,则依次校验:
      1. user.isAuthenticated === true
      2. user.status !== 'suspended'
      3. 若 meta.allowRoles 为非空数组,则要求 meta.allowRoles.includes(user.role)
      4. 若 meta.requirePermissions 为非空数组,则要求 meta.requirePermissions 的每一项都在 user.permissions 中
    • 全部满足返回允许通过,否则拒绝并给出明确拒因
  • 容错与边界:
    • route.meta 可能不存在:用安全访问和默认值处理
    • allowRoles / requirePermissions 可能为非数组或为空:仅在为非空数组时启用校验
    • user.permissions 可能不存在:按空数组处理,避免异常
    • requiresAuth 为 falsy:直接放行(按题意,后续角色/权限要求仅在 requiresAuth 为 true 时生效)

生成代码

/**
 * 路由守卫条件判断
 * @param {Object} user - { isAuthenticated, role, permissions, status }
 * @param {Object} route - { meta?: { requiresAuth?: boolean, allowRoles?: string[], requirePermissions?: string[] } }
 * @returns {{ allowed: boolean, reason?: string, details?: any }}
 */
function canActivate(user = {}, route = {}) {
  const meta = route?.meta ?? {};

  // 1) 不需要鉴权则直接放行
  if (!meta.requiresAuth) {
    return { allowed: true };
  }

  // 2) 需要鉴权:必须已认证
  if (!user?.isAuthenticated) {
    return { allowed: false, reason: 'AUTH_REQUIRED' };
  }

  // 3) 禁止被封禁用户
  if (user?.status === 'suspended') {
    return { allowed: false, reason: 'USER_SUSPENDED' };
  }

  // 4) 角色白名单(存在且非空时才校验)
  if (Array.isArray(meta.allowRoles) && meta.allowRoles.length > 0) {
    if (!meta.allowRoles.includes(user?.role)) {
      return { allowed: false, reason: 'ROLE_NOT_ALLOWED' };
    }
  }

  // 5) 权限要求(存在且非空时才校验:需全部具备)
  if (Array.isArray(meta.requirePermissions) && meta.requirePermissions.length > 0) {
    const userPerms = Array.isArray(user?.permissions) ? user.permissions : [];
    const missing = meta.requirePermissions.filter(p => !userPerms.includes(p));

    if (missing.length > 0) {
      return {
        allowed: false,
        reason: 'MISSING_PERMISSIONS',
        details: { missing }
      };
    }
  }

  // 全部通过
  return { allowed: true };
}

代码解释

  • 获取 meta:使用可选链与空值合并,避免 route 或 meta 缺失时报错
  • requiresAuth 为 falsy 时直接允许通过:符合“仅在 requiresAuth 为 true 时才进行后续严格校验”的约定
  • 已认证校验:!user?.isAuthenticated 则拒绝,拒因 AUTH_REQUIRED
  • 封禁校验:status === 'suspended' 则拒绝,拒因 USER_SUSPENDED
  • 角色校验:仅当 allowRoles 为非空数组时启用;不在白名单则拒绝,拒因 ROLE_NOT_ALLOWED
  • 权限校验:仅当 requirePermissions 为非空数组时启用;使用 filter 找出缺失权限,若缺失非空则拒绝,拒因 MISSING_PERMISSIONS,并在 details 中返回缺失列表
  • 成功路径:所有条件满足后返回 { allowed: true }

优化建议

  • 性能优化(大规模权限数组时):
    • 将 user.permissions 预构建为 Set,all-in 检查可降为 O(n)
      • 示例:const permSet = new Set(userPerms); const missing = meta.requirePermissions.filter(p => !permSet.has(p));
  • 可读性与维护性:
    • 保持“早返回”风格,避免深层嵌套
    • 将拒因设为稳定的枚举码(如上),UI 层再做 i18n 文案映射
    • 用 JSDoc 标注参数与返回值,方便智能提示与类型检查
  • 鲁棒性:
    • 对于入参 user/route 做默认值处理,避免上层漏传导致异常
    • 统一把非数组的 permissions 当作空数组处理,减少分支
  • 策略扩展:
    • 如需让 allowRoles/requirePermissions 在 requiresAuth 为 false 时也生效,可将相关分支上移到 requiresAuth 判断外,并在条件分析中明确策略
  • 安全提示:
    • 前端路由守卫只提供 UX 与轻量防护,关键授权仍需后端重复校验

使用示例

const user = {
  isAuthenticated: true,
  role: 'editor',
  permissions: ['read:post', 'edit:post'],
  status: 'active'
};

const route = {
  path: '/admin',
  meta: {
    requiresAuth: true,
    allowRoles: ['admin', 'editor'],
    requirePermissions: ['read:post', 'edit:post', 'publish:post']
  }
};

const result = canActivate(user, route);
// result => { allowed: false, reason: 'MISSING_PERMISSIONS', details: { missing: ['publish:post'] } }

条件分析

  • 阶梯折扣(按订单原始金额 cartTotal 选择折扣系数):≥800 → 0.85;≥300 → 0.90;≥100 → 0.95;否则 1.00。
  • 新用户立减 10(与任何折扣叠加,执行顺序在阶梯折扣之后)。
  • 优惠券有效条件:coupon 存在且 now <= coupon.expiry 且 cartTotal ≥ coupon.minSpend。
    • type='percent':value 为(0,1)之间的小数,作为折上折系数,乘在已优惠后的应付金额上。
    • type='cash':value 为正数的现金直减,再减到已优惠后的应付金额上。
  • 最低应付金额:不低于 1。
  • 比较基准明确:优惠券的 minSpend 校验使用原始 cartTotal(不是优惠后金额)。

生成代码

/**
 * 计算电商结算的应付金额(阶梯折扣 + 新用户立减 + 优惠券(折上折/直减))
 * 规则要点:
 * 1) 阶梯折扣基于原始 cartTotal:≥800→0.85;≥300→0.90;≥100→0.95;否则 1.00
 * 2) 新用户再减 10(与折扣可叠加)
 * 3) 优惠券有效条件:now <= coupon.expiry 且 cartTotal ≥ coupon.minSpend
 *    - percent:coupon.value 为 (0,1) 的系数,折上折
 *    - cash:coupon.value 为正数,金额直减
 * 4) 最低应付不低于 1
 */
function calculatePayable(cartTotal, isNewUser, coupon, now) {
  // 基本校验与归一化(守卫)
  if (typeof cartTotal !== 'number' || !Number.isFinite(cartTotal)) {
    throw new TypeError('cartTotal 必须是有限数值');
  }
  if (cartTotal < 0) cartTotal = 0;

  const NEW_USER_OFF = 10;
  let payable = cartTotal;

  // 1) 阶梯折扣(基于原始 cartTotal 判档)
  if (cartTotal >= 800) {
    payable *= 0.85;
  } else if (cartTotal >= 300) {
    payable *= 0.90;
  } else if (cartTotal >= 100) {
    payable *= 0.95;
  } // <100 无折扣

  // 2) 新用户立减
  if (isNewUser === true) {
    payable -= NEW_USER_OFF;
  }

  // 3) 优惠券有效性检查(基于原始 cartTotal 验 minSpend;时间直接用 <= 比较)
  const hasCoupon = !!coupon && (coupon.type === 'percent' || coupon.type === 'cash');
  const couponNotExpired = hasCoupon && now <= coupon.expiry;
  const meetsMinSpend = hasCoupon && cartTotal >= coupon.minSpend;

  if (hasCoupon && couponNotExpired && meetsMinSpend) {
    if (coupon.type === 'percent') {
      // 折上折系数需在 (0,1) 之间
      const factor = coupon.value;
      if (typeof factor === 'number' && factor > 0 && factor < 1) {
        payable *= factor;
      }
    } else if (coupon.type === 'cash') {
      const amount = coupon.value;
      if (typeof amount === 'number' && amount > 0) {
        payable -= amount;
      }
    }
  }

  // 4) 最低应付不低于 1
  if (payable < 1) payable = 1;

  // 可选:按业务需要保留两位小数(避免浮点误差)
  // payable = Math.round((payable + Number.EPSILON) * 100) / 100;

  return payable;
}

代码解释

  • 基本守卫:
    • 校验 cartTotal 为有限数值;若为负则归一化为 0,避免异常输入影响判断。
  • 阶梯折扣:
    • 使用 if/else 链构建清晰的“从高到低”判档,保证互斥且只命中一个档位。
    • 折扣系数与中文“打 X 折”一致:95 折→0.95,9 折→0.90,85 折→0.85。
  • 新用户立减:
    • 与阶梯折扣叠加,先乘折扣再减金额,有利于“折上折”符合语义;对最终金额影响与现金券互换顺序等价(两者都是加法群的减法操作)。
  • 优惠券校验:
    • 仅当 coupon 存在且类型为 'percent' 或 'cash' 才继续判断。
    • 过期判断采用 now <= coupon.expiry;Date 或时间戳在 JS 中可直接比较(内部会做 valueOf)。
    • minSpend 使用原始 cartTotal 做门槛判断,符合题意。
    • percent 券:限定 value 在 (0,1) 才生效,作为折上折系数乘在已优惠金额上。
    • cash 券:value 为正数才生效,直接金额再减。
  • 最低应付:
    • 通过一个下界判断,确保应付不低于 1。
  • 可选舍入:
    • 提供注释行,用于在结尾进行两位小数四舍五入,避免浮点误差进入展示/支付环节。

优化建议

  • 配置化阶梯折扣:将阈值与系数抽成有序数组,便于后续运营调档,不改逻辑代码。例如 [{min:800,f:0.85},{min:300,f:0.9},{min:100,f:0.95}] 由上至下匹配。
  • 强化优惠券值域校验:
    • percent 券建议在入库时就统一约定 value 为 (0,1) 的小数;如业务要求支持“10 表示 10%”,可在代码中加一条归一化分支:if (value > 1 && value <= 100) value = 1 - value/100。
  • 货币精度:
    • 为彻底规避浮点误差,可在内部将金额转为“分”的整数运算,最后再除以 100 输出。
  • 可读性:
    • 按“判档 → 固定减免 → 券”这种业务自然顺序组织代码,命名保持语义化(payable、factor、minSpend);适度添加注释解释判定基准(原始金额 vs 优惠后)。
  • 守卫式早返回(适用时):
    • 若存在全局开关或活动期判断,可在函数开头直接返回不打折金额,减少嵌套层级。

使用示例

const now = new Date('2025-12-01T10:00:00Z');

// 示例1:老用户,无券,cartTotal=350 → 9折
calculatePayable(350, false, null, now); // 315

// 示例2:新用户,无券,cartTotal=120 → 95折后再减10
// 120 * 0.95 = 114 → 114 - 10 = 104
calculatePayable(120, true, null, now); // 104

// 示例3:老用户,percent 券 0.9(再打9折),cartTotal=820
// 阶梯:820 * 0.85 = 697 → 券有效且满额 → 697 * 0.9 = 627.3
calculatePayable(
  820,
  false,
  { type: 'percent', value: 0.9, minSpend: 500, expiry: new Date('2025-12-31') },
  now
); // 627.3

// 示例4:新用户,cash 券 30 元,cartTotal=305
// 阶梯:305 * 0.9 = 274.5 → 新人 -10 = 264.5 → 券有效 -30 = 234.5
calculatePayable(
  305,
  true,
  { type: 'cash', value: 30, minSpend: 200, expiry: new Date('2025-12-31') },
  now
); // 234.5

// 示例5:大量优惠导致金额 < 1,触发最低应付 1
calculatePayable(
  110,
  true,
  { type: 'cash', value: 200, minSpend: 100, expiry: new Date('2025-12-31') },
  now
); // 1

示例详情

解决的问题

把零散、易错的业务规则,快速转化为清晰、可维护、可上线的 JavaScript 条件语句,并同步产出解释与优化建议,帮助团队在关键环节提效与控风险。

  • 适用场景:表单与输入校验、权限与路由守卫、定价/优惠规则、状态与异常兜底、数据清洗与分支处理
  • 预期价值:
  1. 减少 if-else 拼凑与返工,几步获得可用代码;
  2. 把业务意图写清楚,代码更易读、易审、易维护;
  3. 自动识别边界与陷阱,降低线上缺陷;
  4. 给出可落地的优化与示例,交付更稳、上线更快;
  5. 兼顾新手入门与老手提效,推动团队风格与标准统一。

适用用户

前端开发工程师

快速搭建表单校验、组件状态切换、路由守卫;一键生成条件语句并附解释,减少调试时间与回归风险。

全栈与中台工程师

将复杂权限、定价、分流等规则转为清晰分支;依据建议优化结构,稳态上线,便于后续扩展与联调。

测试与QA工程师

据代码解释梳理边界清单,派生正反例与异常路径;快速编写高覆盖用例,提前发现隐性逻辑缺陷。

特征总结

基于自然语言条件描述,自动生成清晰易读的JavaScript判断逻辑,快速对接业务需求。
一键在if-else、switch、三元表达之间选型,按复杂度自动匹配最合适的代码结构。
随生成附带逐行说明与意图解读,新同学也能快速理解条件分支与边界处理方式。
自动给出可维护性与性能优化建议,减少嵌套、去重判断、合并分支,降低维护成本。
支持表单校验、权限控制、状态切换等常见场景模板,一键套用并按参数个性化调整。
输出同时提示易错点与规避方案,降低隐性缺陷与逻辑漏洞,提升发布前的代码信心。
生成结果遵循最佳实践与团队风格,复制即用,兼顾一致性、可读性与后续扩展性。
提供真实使用示例与替代写法,帮助快速评估取舍,缩短评审沟通与迭代时间。
支持从简单判断到复杂业务规则拆解,分层输出,便于重构旧逻辑与单元测试覆盖。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 567 tokens
- 3 个可调节参数
{ 条件描述 } { 条件类型 } { 复杂度级别 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59