number类型的数字大小比较我们都知道。那有没有试过string类型的数字进行比较呢?比如'1' 跟 '10'进行比较,'1' 和 '2'相比较,结果是如何呢?
在控制台验证一下:
'1' > '2'
再来
'72' > '100'
'72' > '100' 为 true 那是不对的,为什么会出现这种问题呢?
对于js字符串的比较,如果两个字符串位数一样,跟数值类型的数字比较一样没有问题;但是如果两个字符串位数不一样,那么就会以第一位的ASCII码的数值来进行比较。也就是从两个字符串的第一个字符的ASCII码来进行比较,先大的大,如果第一位一样,那依次比较下一位。
比如前面说的'72' > '100'
'72'的第一位为7,7的ASCII码是55,'100'的第一位为1,1的ASCII码是49,由此可以得出'72' > '100' 为true
所以说,当需要比较两个字符串数值的大小时,不要因为同长度的字符串相比没有问题,就断定也是可以跟数值类型数字一样进行比较。字符串数值进行比较前还是需要转成数值类型后再进行大小比较。
字符串转成数字可以用以下方法,按需取用
Number('xxx')
parseFloat('xxx')
parseInt('xxx')