如题 今天在项目中遇到一个神奇的比较js数值问题 看代码:
var num1 = '11'; var num2 = '2'; console.log(num1 > num2); //false console.log(num1.charCodeAt()); //获取num1的ASCII码的值 结果:49 console.log(num2.charCodeAt()); //获取num2的ASCII码的值 结果:50
结果并不是我们想的那样结果居然是false 为什么呢? 按照我们认为的 11 > 2 肯定是成立的呀 应该说出true才对 但事实上是false。后来查了一下 发现js在比较纯字符串的时候会先获取字符串对应的ASCII码 然后去比较大小
那如何才能获得我们想要的结果呢? 转成整数类型就可以了 使用Number()方法即可 注意string转int最好用Number()方法 用parseInt()方法也可以 但是要注意一些小细节 否则也会遇到不可思议的坑 这里就先不做介绍了。。
修改后代码:
//解决: var num1 = '11'; var num2 = '2'; console.log(Number(num1) > Number(num2)); //true 终于是我们期待的结果了。
特别是我们获取用户输入的文本框的值是数字的话 而且需要进行比较的话 稍不注意。。就会遇到这个坑。。因为用户获取文本框的值(不管是不是数字)都是string类型 可以用typeof检测一下变量类型即可让他原形毕露。。
总结:
1:纯字符串比较,转换成ASCII码在进行比较
2:纯数字和数字字符串相比较,则将字符串数字隐式转换成数字再进行比较
3:纯数字和非数字字符串比较,都返回false
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论