需求
数值,或者数值型字符串,比如"123"可以通过校验。
其他类型不能通过校验。
举例
输入 | 结果 |
---|---|
145 | √ |
“145” | √ |
“145ccc” | × |
true | × |
undefined | × |
null | × |
对象 | × |
分析
首先要明确,js中一共有7种数据类型:
数值;字符串;布尔值;undefined;null;对象;symbol(ES6)
其中,对象包括:狭义的对象(object);数组(array);函数(function)
根据需求,我们需要的是先判断是数值或字符串,然后排除掉非数值型字符串
判断数据类型
js用来判断数据类型的方法有3个:
typeof,instanceof,Object.prototype.toString,其中,typeof对各数据类型的结果如下:
数据类型 | 特例 | typeof运算结果 |
---|---|---|
数值 | “number” | |
字符串 | “string” | |
布尔值 | “boolean” | |
undefined | “undefined” | |
null | “object” | |
对象 | “object” | |
函数 | “function” | |
Symbol | “symbol” |
可知,如果使用typeof可以找到数值和字符串类型。
排除非数值型字符串
js中用于将字符串转换成数值的方法包括:Number、parseInt、parseFloat
Number
Number的转换结果如下:
数据类型 | 特例 | typeof运算结果 |
---|---|---|
数值 | 数值 | |
字符串 | NaN | |
数值型字符串 | 数值 | |
空字符串 | 0 | |
布尔值 | 0/1 | |
undefined | NaN | |
null | 0 | |
对象 | NaN | |
单元素数组 | 元素值 | |
空数组 | 0 |
parseInt、parseFloat
注意定义和以下两条规则即可。
定义:用于将一个字符串转为整数/浮点数
- 如果参数不是字符串,或者字符串的第一个字符不能转化为整数 / 浮点数,则返回NaN
e.g.
parseFloat([]) // NaN
parseFloat('F235') // NaN
parseFloat('') // NaN
- 如果字符串包含不能转为整数/浮点数的字符,则不再进行往后转换,返回已经转好的部分。
e.g.
parseFloat('3.14more non-digit characters') // 3.14
综上,可知,不能使用parseInt和parseFloat来判断数值型字符串,因此,只能使用Number方法。
补充
Number、parseInt、parseFloat都会自动过滤字符串前导和后缀的空格
解决方法
typeof value === 'number' || (typeof value === 'string' && value !== ''&&!isNaN(Number(value)))