javascript由“5” >= "10"返回true引发的思考

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

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

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

发现这个bug后,我立刻更新了代码进行了to number操做,其实也很简单,对于明确的由number to string的值,只要进行 a = a*1;这样的操做就能够了。ajax

疑问来了

虽然bug很快就被解决了,可是我却陷入了思考,为何"5">"10"呢?测试

开始实验、猜想

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

证明

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

一句话归纳就是按照字典序进行对比。blog

反思

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