Number(bidTotalPrice) > Number(this.detailData.purchaseMoney)
这是原本写的关于两个价格的对比,但在某一天却出了问题,由于bidTotalprice是空字符串,导致被转换成0。 于是呢,我又去掉了数字类型的转换,就像下面这样:
bidTotalPrice > this.detailData.purchaseMoney
显然这里我想当然的以为他们会自动做类型转换然后再比较,听上去确实挺合理的,毕竟js是弱类型语言,可是隐式的类型转换仅在不同类型的情况下才有可能会发生,当上述两个字段都是字符串时,自然不会发生我想要的“转换成数字再做对比”,而是导致了例如"5000"<"699"=false这样的结果(字符串比对按位开始)
所以最后,采用了以下的写法:
if(bidTotalPrice){
Number(bidTotalPrice) > this.detailData.purchaseMoney
}
给其中一个字段做非空判断的同时,再加上类型转换,这样既确保不会被转换成0,同时又确保对比时至少有一个是数字类型,不等式能够隐式地做类型转换
总结:
- 类型转换要记得至少有两个不同类型(废话,一样的类型还转换什么!);
- 空字符串转换成数字竟然是0;
- 字符串比对是从高位开始按位比对;