Appearance
number 数字
包含:常规数字、NaN
javascript
var intNum = 55; // 十进制整数 var octalNum1 = 070; // 八进制的56
var octalNum1 = 079; // 无效的八进制数值——解析为79
var octalNum1 = 08; // 无效的八进制数值——解析为8
var hexNum1 = 0xA; // 十六进制的10
var hexNum2 = 0x1F; // 十六进制的31
1
2
3
4
5
2
3
4
5
注意,八进制字面量在严格模式下是无效的,会导致抛出错误。
数值范围
ECMAScript 能够表示的最小数值保存在 Number.MIN_VALUE 中——在多数浏览器中,这个值是 5e-324;能够 Number.MAX_VALUE 中——在大多数浏览器中,这个值是 1.7976931348623157e+308。如果某次计算的结果得到了一个超过 JavaScript 数值范围的值,那么这个数值将会自动转换为 Infinity 值,如果这个数值是负数,则会转换成 -Infinity(负无穷),如果这个数值是正数,则会转换成 Infinity(正无穷)。要确定一个数值是不是有穷的,可以使用 isFinite() 函数。
NaN
- not a numer : 不是一个数,但是属于 number 类型
- NaN == NaN : false , NaN 和任何其他值都不相等
isNaN()
- 用来检测当前这个值是否是非有效数字,如果不是有效数字,检测的结果是 true , 反之是有效数字则为 false
javascript
isNaN(0) // ->false
isNaN(NaN) // ->true
1
2
2
- 当我们使用 isNaN 检测值的时候,检测的值不是 number 类型的,浏览器默认的吧值先转换为 number 类型,任何再去检测
javascript
isNaN('12') //->false
1
Number()
- 把其他数据类型值转化成 number 类型的值
javascript
Number('12') // -> 12
Number('12px') // ->NaN
// 在使用Number转换的时候只要字符串中出现任何一个非有效数字字符,最后的结果都是NaN
Number(true) //-> 1
Number(false) //-> 0
Number(null) // -> 0
Number(undefined) //->NaN
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 把引用数据类型转换成 number,首先需要吧引用数据类型转为字符串(toString),在把字符串转换为 number 即可
javascript
Number([]) // -> ""
Number([12]) // -> 12
Number([12,13]) // -> 12,13 (,是非有效字符) -> NaN
Number({age:12}) // ->NaN
Number({}) // -> NaN
1
2
3
4
5
2
3
4
5
pareInt
- 也是吧其他数据类型值转换为 number,和 Number 方法在处理字符串的时候有所区别
javascript
Number('12px') // -> NaN
parseInt('12px') // -> 12
1
2
2
- 提取规则:从左到右依次查找有效数字字符,知道遇到非有效数字字符为止(不管后端是否还有,都不找了)
javascript
parseInt('12px13') // -> 12
1
数值转换
处理整数最常用的还是 parseInt() ,它会忽略字符前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt() 就会返回 NaN;也就是说,用 parseInt() 转换空字符串会返回 NaN 。如果第一个字符是数字字符, parseInt() 会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。如果字符以“0x”开头且后面跟数字字符,会被解析为 16 进制整数; 以“0”开头且后面跟数字字符,会被解析为 8 进制整数。下面给出一些例子:
javascript
var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制)
var num4 = parseInt(22.5); // 22
var num5 = parseInt("70"); // 70
var num6 = parseInt("0xf"); // 15(十六进制)
1
2
3
4
5
6
2
3
4
5
6
pareFloat
- 在 pareInt 的基础上可以识别小数点
javascript
pareInt('12.5px') -> 12
pareFloat('12.5px') -> 12.5
1
2
2
数字转换
1、首先验证当前要检测的值是否为数字类型的,如果不是,浏览器会默认的把值转换为数字类型
把非数字类型的值转换为数字
- 其它基本类型转换为数字:直接使用 Number 这个方法转换的
【字符串转数字】 Number('13') ->13 Number('13px') ->NaN 如果当前字符串中出现任意一个非有效数字字符,结果则为 NaN Number('13.5') ->13.5 可以识别小数
【布尔转数字】 Number(true) ->1 Number(false) ->0
【其它】 Number(null) ->0 Number(undefined) ->NaN
- 把引用数据类型值转换为数字:先把引用值调取 toString 转换为字符串,然后再把字符串调取 Number 转换为数字
【对象】 ({}).toString() ->'[object Object]' ->NaN
【数组】 [12,23].toString() ->'12,23' ->NaN [12].toString() ->'12' ->12
【正则】 /^$/.toString() ->'/^$/' ->NaN
Number('') ->0 [].toString() ->'' => isNaN([]):false
2、当前检测的值已经是数字类型,是有效数字返回 false,不是返回 true(数字类型中只有 NaN 不是有效数字,其余都是有效数字)