string类型比较

在JS中经常遇到纯数字和各种各样的字符串进行比较,并且稍有混乱,特别整理一下,理清思路。

在JavaScript中,“<”等运算符会强制把左右两边的操作数都先通过ToNumber()抽象运算转换为Number类型后再做比较,除非两个操作数都是String。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script type="text/javascript">
function test(){
//1)纯数字之间比较
//alert(1<3);//true
//2)数字字符串比较,会将其先转成数字
//alert("1"<"3");//true
//alert("123"<"123");//false
//3)纯字符串比较,先转成ascii码
//alert("a"<"b");//true
//alert("abc"<"aad");//false,多纯字母比较,会依次比较ascii码
//4)汉字比较
//alert("我".charCodeAt());//25105
//alert("的".charCodeAt());//30340
//alert("我"<"的");//true,汉字比较,转成ascii码
//5)当数字和字符串比较,且字符串为数字。则将数字字符串转为数字
//alert(123<"124");//true,下面一句代码得出124的ascii码为49,所以并不是转成ascii比较
//alert("124".charCodeAt());//49
//6)当数字和字符串比较,且字符串为非纯数字时,则将非数字字符串转成数字的时候会转换为NaN,当NaN和数字比较时不论大小都返回false.
alert(13>"abc");//false
}
</script>

Sayings

遇到string类型比较的问题,是因为在项目中出了一个bug,if(XXX < YYY) 的判断时对时不对。

后来经过debug,发现是数字和数字字符串比较时出现了问题。查看资料后,索性把其他情况下的比较也都一一列出记录。

参考文献:
ECMAScript 5.1里“<”运算符的规定:https://es5.github.io/#x11.8.1
抽象运算步骤:https://es5.github.io/#x11.8.5

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!