别再用错函数了!字符串转数字的正确姿势(函数使用方法) ypxx.net字符串转数值时到底该用哪个函数

写代码这些年,我一直以为字符串转数字就是小菜一碟,直到有一天线上出了个诡异的bug,我才意识到自己对这块的理解有多片面。那段时间我排查问题排查到崩溃,最后发现根源居然是 ("12px") 返回了 12,而不是程序期望的 NaN。这件事让我彻底改变了对类型转换的认知,不再凭感觉写代码。

说实话, 里能把字符串转成数字的函数太多了,、、、还有那个隐藏的 + 号运算符,每一个看起来都能干活,但用起来坑也不一样。新手容易踩的坑就是随便挑一个用,觉得反正结果差不多。老手才知道,选错了函数可能会让你在深夜调试到怀疑人生。

我开始养成习惯,每次写类型转换之前,先想清楚自己要什么类型的数字,要不要支持科学计数法,输入的数据到底是纯数字字符串还是带单位的。这些思考花不了多少时间,但能避免很多问题。毕竟 bug 找起来比写代码累多了。

为什么会在我意想不到的地方翻车

这个函数表面看起来挺友好,实际上暗藏玄机。它的第二个参数是进制,很多人根本不知道这参数存在,或者知道但不注意默认值。我见过最坑的一次,("08") 直接返回 0,因为八进制里根本没有 8 这个数字,解析到 8 就停了。

还有一个让人头疼的地方是它会忽略后面的非数字字符。("") 返回 123,("") 返回 NaN。这种设计有时候很有用,有时候又让人摸不着头脑。如果你在做表单验证,输入了 "100元",用 处理的话,结果会是 100,而不是你想要的错误提示。

遇到这种情况,我现在的做法是先做格式校验,确保字符串是合法的数字表示,再用 。这样既安全又可控。与其事后补救,不如事前把关,毕竟写代码是为了省心,不是为了给自己添堵。

和到底有什么区别

处理浮点数的时候比 顺手多了,它不会在碰到字母的时候突然停住,而是会把整个能解析的部分都吃掉。("3.14.15") 返回 3.14,不会报错,也不会返回 NaN,感觉比 温柔一些。但温柔归温柔,它的边界情况也不少,遇到超大数字或者特殊格式的时候还是会翻车。

函数就比较严格了,它是全有或全无的风格。字符串里只要有一个字符不合法,就返回 NaN。这种一刀切的方式虽然看着死板,但有时候正是你需要的。在做数据清洗的时候,我更喜欢用 ,因为它不会让你误以为某个格式错误的字符串是合法的数字。

说到底,这三个函数各有各的脾气。用好了是工具,用错了是地雷。我没有一个放之四海而皆准的方案,只能说多踩几次坑,慢慢就熟了。