js坑之字符串数字比较大小

如题 今天在项目中遇到一个神奇的比较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



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复12人评论7,777人参与