最近做项目的时候出现一个问题,要将input输入的值(数字)与一个字符串(数字)进行对比,然后出现了问题:输入的值是个位数,但是却比三位数大,例如输入3,要比较的值是200,两个变量都是字符串类型,对比结果是3比200大。
先在浏览器复现问题
在浏览器控制台中,可以发现’3’>'200’的结果是true。如果在浏览器控制台中输入 3>200,结果是false。
实际上,'3'>'200'为true并没有问题,在对比中并没有隐式转换,而是ASCII码的对比。
字符串对比是ASCII码的对比,而且是用字符串首位进行对比,例如’3’>‘200’这里的对比实际上是’3’>'2’的对比,最后根据变量的ASCII码得出结果
ASCII码表:
根据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