Javascript之类型转换(数字对比)

38 阅读1分钟
Number(bidTotalPrice) > Number(this.detailData.purchaseMoney)

这是原本写的关于两个价格的对比,但在某一天却出了问题,由于bidTotalprice是空字符串,导致被转换成0。 于是呢,我又去掉了数字类型的转换,就像下面这样:

bidTotalPrice > this.detailData.purchaseMoney

显然这里我想当然的以为他们会自动做类型转换然后再比较,听上去确实挺合理的,毕竟js是弱类型语言,可是隐式的类型转换仅在不同类型的情况下才有可能会发生,当上述两个字段都是字符串时,自然不会发生我想要的“转换成数字再做对比”,而是导致了例如"5000"<"699"=false这样的结果(字符串比对按位开始)

所以最后,采用了以下的写法:

if(bidTotalPrice){
Number(bidTotalPrice) > this.detailData.purchaseMoney
}

给其中一个字段做非空判断的同时,再加上类型转换,这样既确保不会被转换成0,同时又确保对比时至少有一个是数字类型,不等式能够隐式地做类型转换

总结:

  1. 类型转换要记得至少有两个不同类型(废话,一样的类型还转换什么!);
  2. 空字符串转换成数字竟然是0;
  3. 字符串比对是从高位开始按位比对;