在实现前端页面排序功能过程中遇到的问题,由于自己的粗心导致了生产上问题。
原本是通过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”。以后在比较字符串时候需要注意这个问题。
参考:
[url]http://www.cnblogs.com/xuebin/articles/1296837.html[/url]
原本是通过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”。以后在比较字符串时候需要注意这个问题。
参考:
[url]http://www.cnblogs.com/xuebin/articles/1296837.html[/url]