一个神奇的比较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

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

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/1641
0 评论
576

发表评论

!