最近做项目的时候出现一个问题,要将input输入的值(数字)与一个字符串(数字)进行对比,然后出现了问题:输入的值是个位数,但是却比三位数大,例如输入3,要比较的值是200,两个变量都是字符串类型,对比结果是3比200大。

先在浏览器复现问题

javascript 字符比较 js字符串的比较_ecmascript


在浏览器控制台中,可以发现’3’>'200’的结果是true。如果在浏览器控制台中输入 3>200,结果是false。

javascript 字符比较 js字符串的比较_javascript_02


实际上,'3'>'200'为true并没有问题,在对比中并没有隐式转换,而是ASCII码的对比。

字符串对比是ASCII码的对比,而且是用字符串首位进行对比,例如’3’>‘200’这里的对比实际上是’3’>'2’的对比,最后根据变量的ASCII码得出结果

ASCII码表:

javascript 字符比较 js字符串的比较_前端_03


根据ASCII码表,字符串类型的3,ASCII值是51;字符串类型的2,ASCII值是50;

‘3’>'200’的对比可以看成 51>50,所以结果是true。


charCodeAt函数是可以将变量转换位对应的ASCII码。

String.fromCharCode函数可以将ASCII码转换为对应的内容。

let a="30";
console.log(a.charCodeAt());//输出51,只会使用变量的首位进行转换,并且变量是String类型
let b=50;
console.log(String.fromCharCode(b));//输出2