神奇的Javascript,神奇的字符串比较 2012.1.12

      今天无意当中碰到一个很诡异的问题,在Javasript中字符串数字的比较,按正常的来说不应该出现这种情况,因为我们一般在做数字之间的比较时,都会先做类型转换,转换后就没问题。不过既然有这种情况发生,我们今天就来分析分析,大家看下面的code:

var a = '100' > '2';//false
var b = '3' > '2';//true
 
//很诡异吧!大家肯定在想,为什么?
//为什么 a = false, b = true ?
//哈,一开始我也是琢磨了半天,为什么呢?原来在Javasript中字符串这几种(<、>、<=、>=)运算符的比较都是字典序比较的。那什么是字典序呢?我查了一下,是一种排序算法。那字典序是如何排序的呢?它是一位一位的比较,从第一位开始,直接比较ASCII码,若不等就直接返回结果,若相等再比下一位,直到比较完毕。
//上面的例子我们可以分析下,我们先罗列出字符串ASCII码对应关系,这样一比一,按照字典序的规则就很容易明白了。
'100' = [49,48,48];
'2' = [50];
'3' = [51];
 
//var a = '100' > '2'; 49和50比较,不等,直接返回结果,所以 a = false;
//var b = '3' > '2'; 51和50比较,不等,直接返回结果,所以 b = true;
  1. 忆夏天 回复 2012.1.12 16:45

    好精彩的说明….好犀利的剖析….

发表评论