都知道字符串的大小比较是根据字符串的asc码进行比较的,但是如何比较呢?
1 2 3 4 5 6 7 | var a = 'a21'; var b = 'b12'; var c = 'a12'; var d = 'a'; |
这三个字按照大小来比较应该是:b > a > c > d。
何解?
字符串比较时先将字符串分割,如a,分割后为{a,2,1}。比较时先对第一个字符进行比较。
如果a和b比较,那么a[0] < b[0],即返回a<b。
如果a和c比较,那么a[0] = c[0],然后进行第二个字符比较,a[1] > c[2],即返回a > c。
那么延伸一下,
1 2 3 | var a = '1'; var b = '10'; |
答案是什么? a < b。
如果,
1 2 3 | var a = '2'; var b = '10'; |
答案又是什么呢? a > b。
好了,大概了解了,我们再来看看颠覆三观的另外一个比较。
1 2 3 | var a = 1; var b = '01'; |
猜猜看,结果如何? 结果是a = b。
如果这样呢?
1 2 3 | var a = '1'; var b = '01'; |
我猜很多人都迷糊了,何解? a > b。可是为什么前面的数字和字符串比较的时候是等于呢,因为咱们万能js发现比较变量里面存在数字的时候,会优先将被比较的变量也尝试转换为数字,进行比较。当然是尝试,如果被比较变量不能被转换成数字呢?
如:
1 2 3 | var a = 1; var b = '0b'; |
这是无法比较的,当被比较变量无法转换成字符串时,不会将比较的变量转换成字符串去比较,和字符串转数字不一样,这个过程不可逆。
附ascii查询:http://ascii.911cha.com/