JS 区分正则和普通对象的方法

2021-11-10 · 周三一般多云

下午发现我昨天给公司 WordPress 项目手写的“表单项处理器”功能有一处 Bug,主要得知正则表达式就是一个 Object,所以不能直接用 typeof 来判断,只能用另外一个简单的办法,但也不知道具体是什么原理。

const rule = {
  required: true,
  // 如果这里变成了下面的对象,就识别不了
  pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
  pattern: {
    value: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
    msg: "格式不对"
  }
};

// 如果要输出对象里面的 msg,就需要检测是不是对象,而正则也是对象,所以这种方法会出错
let _msg = typeof rule[reason] === "object" ? rule[reason].msg : _name + " is invalid";

// 改成这种形式,就可以判断纯对象了
let _msg = Object.prototype.toString.call(rule[reason]) === "[object Object]" ? rule[reason].msg : _name + " is invalid";
这篇日记是几个月后补上的了,现在发现源码的判断流程里面并没有判断 rules 里面的属性是否为对象,也就是说拿去检测 value 的「条件来源」写的很模糊,这个自定义报错的功能,实际上恐怕只能给 required 属性用而已。

今日原神进度:

  • 日常委托和刷体力
  • 完成秘境:华清归藏密宫
  • 完成秘境:曲径通幽之处
Paul

Paul

特立独行的一只前端菜狗。这篇日记编写大概耗时了 0 分钟,内容均为个人原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!如本站内容对你有所帮助的话,不妨 捐助支持 一下?

奇趣音乐盒技术源于 Kico Player
Emmm,这里是歌词君