4

众所周知,js是弱类型的语言。因此在一些不注意的地方容易犯错误。在此记录一下前几天写代码的时候,判断两个值相比较的结果来进行下一步的操作。通过ajax得到这两个值,是字符串类型的数字,很显然返回之前已经toString()了。当时做比较的时候我也没有多想,我以为这两个值会自动转换成number类型来比较,结果就悲剧了。
代码如下

if(a>=b){
    ....
}
//实际执行结果是

if("5">="10"){
    ....
}
//结果值是 true

发现这个bug后,我马上更新了代码进行了to number操作,其实也很简单,对于明确的由number to string的值,只要进行 a = a*1;这样的操作就可以了。

疑问来了

虽然bug很快就被解决了,但是我却陷入了思考,为什么"5">"10"呢?

开始实验、猜测

我又测试了"5">"6","5">"11"等等,然后发现了规律,这两个值比较是依赖于字符串的第一个值的大小。
接下来我又验证了英文字母、汉字之间的相互比较,很快就有了猜测方向,很可能是根据ASCII值来进行比较的。然后就下班溜了。。。

证实

今天查了一下资料,讲的很清楚小议js下字符串比较大小

一句话概括就是按照字典序进行对比。

反思

  1. 虽然写的是弱类型的js,但是在有明确类型的情况下,最好还是转换成对应的类型进行比较。
  2. 早点上TypeScript的车吧
  3. 谁有TypeScript + React 相关资料麻烦分享一下,谢谢啦

波罗丁的菠萝
886 声望14 粉丝

深林人不知,明月来相照