js 字符串的数字 比较

256 阅读1分钟

number类型的数字大小比较我们都知道。那有没有试过string类型的数字进行比较呢?比如'1' 跟 '10'进行比较,'1' 和 '2'相比较,结果是如何呢?

在控制台验证一下:

'1' > '2'

截屏2022-09-14下午6.30.06.png

再来

'72' > '100'

截屏2022-09-14下午6.31.51.png

'72' > '100' 为 true 那是不对的,为什么会出现这种问题呢?

对于js字符串的比较,如果两个字符串位数一样,跟数值类型的数字比较一样没有问题;但是如果两个字符串位数不一样,那么就会以第一位的ASCII码的数值来进行比较。也就是从两个字符串的第一个字符的ASCII码来进行比较,先大的大,如果第一位一样,那依次比较下一位。

比如前面说的'72' > '100'

截屏2022-09-14下午6.38.36.png

'72'的第一位为7,7的ASCII码是55,'100'的第一位为1,1的ASCII码是49,由此可以得出'72' > '100' 为true

所以说,当需要比较两个字符串数值的大小时,不要因为同长度的字符串相比没有问题,就断定也是可以跟数值类型数字一样进行比较。字符串数值进行比较前还是需要转成数值类型后再进行大小比较。

字符串转成数字可以用以下方法,按需取用

Number('xxx') 

parseFloat('xxx')

parseInt('xxx')