一个神奇的比较js数值问题看代码:结果并不是
如题 今天在项目中遇到一个神奇的比较js数值问题 看代码:
<pre class="brush:js;toolbar:false">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</pre>
结果并不是我们想的那样结果居然是false 为什么呢? 按照我们认为的 11 > 2 肯定是成立的呀 应该说出true才对 但事实上是false。后来查了一下 发现js在比较纯字符串的时候会先获取字符串对应的ASCII码 然后去比较大小
那如何才能获得我们想要的结果呢? 转成整数类型就可以了 使用Number()方法即可 注意string转int最好用Number()方法 用parseInt()方法也可以 但是要注意一些小细节 否则也会遇到不可思议的坑 这里就先不做介绍了。。
修改后代码:
<pre class="brush:js;toolbar:false">//解决:
var num1 = '11';
var num2 = '2';
console.log(Number(num1) > Number(num2)); //true 终于是我们期待的结果了。</pre>
特别是我们获取用户输入的文本框的值是数字的话 而且需要进行比较的话 稍不注意。。就会遇到这个坑。。因为用户获取文本框的值(不管是不是数字)都是string类型 可以用typeof检测一下变量类型即可让他原形毕露。。
总结:
1:纯字符串比较,转换成ASCII码在进行比较
2:纯数字和数字字符串相比较js字符串大小比较,则将字符串数字隐式转换成数字再进行比较
3:纯数字和非数字字符串比较js字符串大小比较,都返回false
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
发表评论
热门文章
Spimes主题专为博客、自媒体、资讯类的网站设计....
一款个人简历主题,可以简单搭建一下,具体也比较简单....
仿制主题,Typecho博客主题,昼夜双版设计,可....
用于作品展示、资源下载,行业垂直性网站、个人博客,....
尘集杂货铺和官网1t5-cn
11月11日
[已回复]
希望主题和播放器能支持SQLite数据库,AI能多个讯飞星火