为何parseFloat返回值无法调用replace?需搭配toFixed才能使用?
为什么parseFloat需要搭配toFixed才能使用replace()方法?
问题场景
执行以下代码时会抛出错误:
console.log(parseFloat(123.123).replace(/,./g, ''))
错误提示:
Uncaught TypeError: parseFloat(...).replace is not a function
但执行下面的代码却能正常运行:
console.log(parseFloat(123.123).toFixed(0).replace(/,./g, ''))
核心原因
parseFloat()的返回值是数字类型(Number),而replace()是字符串(String)专属的方法,数字本身没有这个方法,所以直接调用会触发类型错误。toFixed()是Number类型的内置方法,它的作用是将数字转换为指定小数位数的字符串(比如示例中parseFloat(123.123).toFixed(0)会返回字符串"123")。当结果变成字符串后,自然就能调用replace()方法了。
补充说明
如果不想用toFixed(),也可以直接把parseFloat返回的数字转为字符串后再调用replace(),比如:
console.log(String(parseFloat(123.123)).replace(/,./g, ''))
不过要注意,toFixed()会对数字做四舍五入处理,而直接转字符串是保留原始数字的字符形式,两者的转换结果可能有差异。
内容的提问来源于stack exchange,提问作者ItecStudent
相关产品推荐
相关产品推荐

