在项目开发过程中,经常遇到一些细节问题,考验着我们对javascript基础知识的理解程度。今天就遇到了一个老生常谈,却时常又容易忽视的问题。
起因是在两个未写明type的input框中获取到了数字字符串,要进行大小比较,进而进行页面上的提示。
举个栗子:
// 获取到的两个值
var a = "2";
var b = "10";
a < b => false
这肯定不是我们常识所能接受,也不是我们原想的结果。那么问题出在哪里了呢?原因是,这不是纯数字的大小比较,而是字符串的大小比较。两个字符串的比较,是对比字符串首字符的字符编码值(ASCII值),如上例
// 对应的ASCII值
'2' => 50
'1' => 49
则结果就如上例那样了。
以上可以参看ECMAScript 关系运算符、详解js运算符
我们要修改这样的bug,方向是,将字符串转化为数字,再进行大小比较,方法有三,如下:
1、使用js提供的转换成数字的方法,parseInt()用于转换为整数,parseFloat()用于转换为浮点数;注意NaN情况的处理。
2、使用js提供的强制类型转换方法,Number(),可根据数字字符串为整数或者浮点数,同样需要注意NaN情况的处理。
以上可参看ECMAScript 类型转换
3、还有两个小技巧,可参看ECMAScript 一元运算符中,一元加法和一元减法部分的文档
+a => 2
a - 0 => 2
在详解js运算符的末尾,还有一个运算符的思维导图,值得分享,转载如下: