今天无意当中碰到一个很诡异的问题,在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;


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