日期:2014-05-16  浏览次数:20310 次

javaScript 中比较数字字符串问题
在实现前端页面排序功能过程中遇到的问题,由于自己的粗心导致了生产上问题。

原本是通过js原生的sort方法排序,比较纯字符串数字大小。但是没有将纯字符串数字转换为数字就直接比较了。

如:“13” 与 “126”比较的时候会返回true,但是我的本意是返回false.需要修改为parseInt("13",10) > parseInt("126",10)后再比较。

但是这让我想起了在ruby中比较字符串,不是一起比较字符串大小,而是分别一个一个字符比较,如果有一个大于那么就返回。

那么“13” 与 “126”比较为什么前者大于后者呐?这时候让我想起了每个字符转为unicode后在比较。

在Unicode值和字符串中的字符间转换,要获得字符的Unicode编码,可以使用string.charCodeAt(index)方法,反之String.fromCharCode()方法。

通过比较("1").charCodeAt(0)返回49,("3").charCodeAt(0)返回51,("2").charCodeAt(0)返回50,这也就是为什么“13” > “126”。以后在比较字符串时候需要注意这个问题。

参考:
http://www.cnblogs.com/xuebin/articles/1296837.html

1 楼 x734545751k 2011-10-12  
直接判断a-b是否大于0啊。反正我是这么干。
2 楼 deng131 2011-10-12  
>>> '13' - '126'
==> -113
但是如果是希望是数字比较还是转为数字比较安全。