且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

前端常见bug系列4: JavaScript中忘记类型转换所导致的条件判断错误举例

更新时间:2022-05-11 04:00:18

一、忘记类型转换的小数比较错误

举个例子,我们要进行一个字符串型的小数的比较:'8.8'>'8.7',结果自然是true。

那么'8.8'>'8.10'呢?结果仍然是true,但愿你没有将它误以为是8.8>8.10

二、忘记类型转换的版本号比较错误

类似上面的问题,在进行版本号比较时,一样存在。比如,我们这么比较'8.8.1'>'8.10.1',结果就是错误的。合理的比较方法应该是将两个待比较的版本号按'.'作为分隔符进行拆分,并将每一位转换成数字,然后按位比较。

三、字符串型的'true','false'条件判断时导致的错误

来看这个语句:

if('false') console.log(1);

此时你很可能是希望该条件判断为false,而实际上它却是true。这样直接写出来相信每个人都不会弄错,问题在于上面这个语句中的'false',往往是经过诸多计算后得到的一个结果,或者是来自于接口的某个数据项,在这些诸多的表面现象掩盖之下的字符型'false',有时很容易被疏忽。

类似这样的容易出现错误的语句还有:

if('0') console.log(1);
if('undefined') console.log(1);
var a;
if(typeof a) console.log(1);

诸如此类,不一而足。类似这种条件判断语句,在代码中再常见不过,而且往往是业务逻辑执行与否的判断开关,一旦出现判断错误,则整个分支的执行都是错误的,影响相当严重。如果类似上述的错误语句出现在基础工具方法中,影响的面还将更大。所以,可得长点心了!