共计 597 个字符,预计需要花费 2 分钟才能阅读完成。
众所周知,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 相关资料麻烦分享一下,谢谢啦
正文完
发表至: javascript
2019-07-07