js 页面报错 Cannot read property length of null

本文讲述了在后台开发中遇到的一个常见问题:Mapper XML文件中的错误导致的程序异常。具体表现为查询结果为null,进一步排查发现是由于返回值类型设置错误引起的。文章详细介绍了问题的定位过程及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度后说是后台的错误,然后就debug, 果然是,查询的结果为null, 但是页面传参需要json格式,所以就报错。

找问题所在就一步一步找,最后发现是mapper.xml出错,检验sql语句没错,最后发现是返回值的类型写错了。

 

这种错误一般是参数传递造成的。

### 解决方案分析 在处理 `input` 的 `change` 事件时,如果遇到 `'Cannot read property 'replace' of undefined'` 错误,通常是因为尝试调用 `.replace()` 方法的对象未被正确初始化或为空值。这种情况下,需确保目标对象始终为有效的字符串类型[^1]。 #### 错误原因剖析 该错误的核心在于对 `undefined` 类型变量调用了 `.replace()` 方法。具体来说: - 当输入框中的值为空 (`''`) 或者由于某些逻辑导致获取不到实际值时,可能会返回 `undefined`。 - 如果后续代码直接对该潜在的 `undefined` 值调用 `.replace()` 方法,则会抛出上述异常。 因此,在执行替换操作前应先验证目标值的有效性。 #### 改进后的代码实现 以下是改进版的 JavaScript 函数,它不仅解决了原始问题还增强了健壮性和用户体验: ```javascript function clearNoNum(inputElement) { if (!inputElement || typeof inputElement.value !== 'string') return; let value = inputElement.value.trim(); // 判断是否为 undefined 或 null 并转换成空串以防报错 if (typeof value === 'undefined' || value === null) { value = ''; } // 清除所有非数字和小数点之外的字符 value = value.replace(/[^\d.]/g, ''); // 确保只有一个小数点存在 while (value.indexOf('.') < value.lastIndexOf('.')) { value = value.slice(0, value.lastIndexOf('.')); } // 防止以 '0' 开头再加额外数字的情况(除了 . 后面) if (value.charAt(0) === '0' && value.length > 1 && value.charAt(1) !== '.') { value = value.charAt(0); } // 设置回原输入框 inputElement.value = value; } // 千分位格式化函数 function toFormatAmount(inputElement) { if (!inputElement || typeof inputElement.value !== 'string') return; let value = inputElement.value.trim(); if (value.includes('.')){ const parts = value.split('.'); value = formatNumber(parts[0]) + '.' + parts[1]; }else{ value = formatNumber(value); } inputElement.value = value; } function formatNumber(num){ return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } ``` 在此版本中增加了对于 `undefined` 和 `null` 输入值得预处理步骤,从而避免了可能出现的相关运行期错误。另外通过循环删除多余的小数点保证最终结果符合标准金额格式要求[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值