【JS】字符串数字比较大小的坑“2”>“10“

数字比较  1>0  //true

字符串比较 '1'>'0'  // true

数字比较 2 > 1  // true 

字符串比较  '2' > '1' // true

数字比较 2> 11 // false

字符串比较 '2' > '11'  //  true  

出现了,‘2’ 大于 ‘11’ 为 true , 问题来了:“2”不应该小于”11“吗?

在这里插入图片描述
在这里插入图片描述

原因

javascript中定义的var类型是弱类型,默认是String类型,在比较两个数字大小的时候默认比较的是两个字符串,也就是8和10比较的时候 实际是在和10的第一位1做比较,所以也就是出现了8大于10的情况.
使用eval()函数,将var 定义的变量进行类型转换之后;
或者用parseInt("2")转换之后再进行比较

javascript字符串在进行大小比较时,会根据第一个不同的字符的 ASCII 码值进行比较,当数字 与字符串比较大小时,会强制的将字符串(string)转换成数字(number)然后再进行比较。
即是说在同是数字的时候确实是 2 小于 11, 但是在同是字符串的时候,首先左边第一位的是 '2' 转换成 0000 0010(二进制) 与右边第一位 '1' 转换成 0000 0001 (二进制) 做比较大小,然后,再按后面的位置一一对应比较。位数不够的自动补为 0

数字比较 1=='1' //true
数字比较 1==='1' // false
==比较时,如果一边是字符,一边是数字,会先将字符串转换成数字再进行比较;
===比较时,不会进行类型转换,会比较类型是否相等。

要注意的是 NaN与任何值(包括它自己)比较时都是false

猜你喜欢

转载自blog.csdn.net/qq_39900031/article/details/131564520
今日推荐