You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理对象内联函数的错误并简化验证代码调用

实现无try-catch的链式验证调用

核心思路

不再通过抛出错误终止验证,而是在验证对象内部维护一个有效性状态标记,每个验证方法仅在当前状态有效时执行检查,失败则标记为无效,始终返回自身以支持链式调用。最后通过重写valueOf方法,让验证对象在被转为布尔值时直接返回有效性状态。

修改后的验证函数

const checkText = (t) => ({
  _valid: true,
  isNotEmpty: function () {
    // 仅当前有效时才执行检查
    if (this._valid && t.length === 0) {
      this._valid = false;
    }
    return this;
  },
  isEmail: function () {
    const emailRegex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,20})+$/;
    if (this._valid && !emailRegex.test(t)) {
      this._valid = false;
    }
    return this;
  },
  // 重写valueOf,转为布尔值时返回有效性状态
  valueOf: function () {
    return this._valid;
  }
});

一行式调用方式

// 使用!!强制转为布尔值
const isFieldValid = !!checkText('valid@example.com').isNotEmpty().isEmail();

// 或使用Boolean()转换
const isFieldValid2 = Boolean(checkText('').isNotEmpty().isEmail());

说明

  • 每个验证方法都会先检查当前_valid状态,已失效的情况下不会重复执行检查,提升效率。
  • 链式调用始终返回验证对象本身,保持调用的连贯性。
  • 通过valueOf方法的重写,让验证对象可以直接被转为布尔值,实现一行式的结果获取。

内容的提问来源于stack exchange,提问作者user2631621

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:01:13