js字符串和数字之间的⼤⼩对⽐!
在进⾏⽐较时js会先将两边的类型⾃动转成⼀致再对⽐。
⽐较⾸先分为以下⼏种情况:
1、纯数字之间⽐较:1<2  //true;(不解释)
2、纯数字与数字型字符串之间⽐较:222 <  '30'  //false  (此时数字型字符串会转成纯数字再与前⾯的纯数字⽐较,即222与30相⽐谁⼤?当然22喽!)
ps:这⾥为啥要把字符串转成数字,⽽不是把数字转成字符串再做对⽐?
⽐如将上⾯的数字222转‘222’再与'30'对⽐,那结果就是true了!(字符串做对⽐,字符串对⽐接下来会说。),可是实际操作却不是这样。。。
但javascript⽐较奇怪,相⽐将数字转成字符串,js会优先选择将字符串转成数字。(如果数字转成字符串,那字符串之间再进⾏字符编码对⽐,⽽之间将字符串转成数字就直接对⽐了)
3、数字与其他字符串之间的⽐较:222 < 'abc'  //false
这种情况下,js会将字符串转成数字,但abc不能转为数字,js转数字的⽅法:parseInt('abc'),如果解析不到数字,则将返回⼀个NaN的值。所以'abc’转换的结果永远
是NaN,所以结果永远是false(即222 > 'abc'  //false)。
js验证字符串长度ps:这时候⼜想问:为什么不能将abc转成ASCII码再对⽐?
那么js就要解释了:因为222是数字,不是字符串,不能转ASCII码,js本着⼀视同仁的态度就是这个结果了。。。(js有⾃⼰的基本准则,它按⾃⼰的基本法⾛)
4、数字型字符串之间⽐较:'222'<'30'  //true;    '5'>'10' //true
这种⽐较为ASCII码⽐较,依次取每个字符,字符转为ASCII码进⾏⽐较,ASCII码先⼤的即为⼤;因为第⼀个字符3⽐2⼤所以后⾯就不⽤考虑了;
5、其他字符串之间⽐较:'d'>'abc' //true;
字符串⽐较为ASCII码⽐较,d的ASCII码为100,⽽a的ascii码为97所以结果为true;
总结⼀下:
1、纯字符串⽐较,转换成ASCII码在进⾏⽐较;
2、纯数字和数字字符串相⽐较,则将字符串数字隐式转换成数字再进⾏⽐较;
3、纯数字和⾮数字字符串⽐较,都返回false;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。