众所周知,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下字符串比较大小
一句话概括就是按照字典序进行对比。
反思
- 虽然写的是弱类型的js,但是在有明确类型的情况下,最好还是转换成对应的类型进行比较。
- 早点上TypeScript的车吧
- 谁有TypeScript + React 相关资料麻烦分享一下,谢谢啦