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

JS代码报错Uncaught TypeError: V[a].exec is not a function的修复求助

JS代码报错Uncaught TypeError: V[a].exec is not a function的修复求助

嗨,我来帮你搞定这个报错问题~

你遇到的这个错误,根源在于给Object.prototype添加自定义方法导致的原型污染。JS里几乎所有数据类型(字符串、数组、甚至内置API的对象)都继承自Object.prototype,当你在它上面加了twoDigits方法后,一些内置函数(比如和正则相关的exec方法)在遍历对象属性时,会意外获取到这个自定义方法,从而触发类型错误。

下面给你两种可行的修复方案:

方案1:使用独立工具函数(推荐,完全避免原型污染)

把twoDigits改成独立函数,直接接收数字参数,这样不会影响任何内置原型:

let now = new Date();

// 独立工具函数,处理数字转两位格式
function twoDigits(num) {
  return ("0" + num).slice(-2);
}

// 调用函数处理小时和分钟
timeOfDay = twoDigits(now.getHours()) + ':' + twoDigits(now.getMinutes());

// 时间判断逻辑不变
if ('05:01' <= timeOfDay && timeOfDay <= '23:59') {
  document.getElementById('skryj').style.display = 'none';
}

方案2:给Number原型添加方法(保留链式调用)

因为getHours()和getMinutes()返回的都是数字类型,你可以把方法挂在Number.prototype上,只影响数字对象,不会污染全局原型:

let now = new Date();

// 仅给数字类型扩展方法
Number.prototype.twoDigits = function() {
  return ("0" + this).slice(-2);
}

// 链式调用逻辑不变
timeOfDay = now.getHours().twoDigits() + ':' + now.getMinutes().twoDigits();

if ('05:01' <= timeOfDay && timeOfDay <= '23:59') {
  document.getElementById('skryj').style.display = 'none';
}

两种方案都能解决你的报错问题,个人更推荐第一种,因为原型扩展如果处理不当很容易引发类似的隐性问题,独立函数更安全可控。

备注:内容来源于stack exchange,提问作者viyrag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:54:32