一、数值
1、number类型
包括了常规数字类型和NaN。
2、JS数值的特征
- 不区分整数值和浮点数值。
- 所有数值均用浮点数表示。
- 采用IEEE-754标准定义的64位浮点数格式表示
(整数在实际操作时基于32位整数,此时在表达数的时候是有限的)
3、直接量
(1)整数的直接量
整数的直接量也就是整数的字面量。
除了十进制外,JS能识别十六进制,并且在实际的使用中,十六进制的使用场景比较多。
在ES6的严格模式下,禁止使用八进制(以0o或0O为前缀)
(2)浮点数直接量
浮点数的直接量可以理解为浮点数的字面量。
浮点数的直接量的写法分为:实数写法和指数记数法(科学计数法)
实数写法:3.1415
指数计数法:实数部分后跟e(或E),再跟正负号,再跟整型的指数。例如:5.12e12则表示5.12 x 10^12。
(3)算数运算
运算符:
(ES5)+、-、*、/、%。
(ES6)**(指数操作符)如:2**3**2 = 2^(3^2)
溢出 overflow
- 溢出发生在数值运算的结果超过了JS能表示的数值上限的时候。
- 溢出的结果输出为infinity。超过负数范围则是-infinity。
- 基于±Infinity的加、减、乘、除等算术运算结果依然是±Infinity。
任意数除以0就会导致溢出,但是JS不会报错,只会输出 ± infinity。
infinity / infinity的结果是NaN。因为在计算机中的infinity是无法表示的,则计算机认为inifinity是非数值NaN。
下溢 underflow
- 当运算结果无限接近于零,并比JavaScript能表示的最小值还小时发生。
- 下溢的结果JS会返回0,如果一个负数发生下溢,则返回 -0。
被零整除
会简单地返回 ± infinity。0 / 0 = NaN
4、数值转换
JS提供了3个函数可以将非数值转换成为数值。Number()、parseInt()、parseFloat()
例如:
parseInt(“0xA”) //10
parseInt(“A”, 16) //10
parseInt("3.14159e3") //3
parseInt(3.14159e3)//3141
parseFloat(“3.14159e3”) //3141.59
二、Number
1、基本用法
对应与数值的应用类型,创建一个Number对象的构造函数let num = new Number(10);
常用方法
- toString( ),返回数值对象的字符串表示。toSring(2)中的2表示,按照2进制进行转化。
- toLocaleString( ),返回数值对象的字符串本地表示。
- valueOf( ),返回数值对象的原始数值。(可以理解为,将包装对象的装箱的原始值给拆箱出来)
- 为了正确的小数位数精度表示,3个会四舍五入返回值的方法。
toFixed(n)、toExponential(n)、oPrecision(n)
toFixed(n),返回包含指定小数位数的数值字符串。n表示保留的小数位数。
toExponential(n),返回科学记数法表示的数值字符串。n表示结果中的小数的位数。
toPrecision(n),返回数值最恰当的形式。n表示结果汇总数字的总位数(不包含指数)。
从本质上来说,toPrecision()会根据精度来确定调用toFixed()还是toExponential()
2、Number在ES6新增方法
(1)Number.isFinite( ),用于检查一个数值是否有限,有限则返回true,无限则返回false。
如果参数类型不是数值,一律返回false
Number.isFinite()不会对数值进行转换,并且 isFinite === Number.isFinite
的结果为false,表明这两个并不是同一种方法。
全局下的isFinite会对数字字符串(“123”)进行转换,但是Number.isFinite不会进行任何转换。
(2)Number.isNaN( ),用于检查一个是否为NaN。如果参数类型不是NaN,一律返回false。
(3)Number.parseInt( )与Number.parseFloat( ),这两个方法与全局环境下的parseInt()和parseFloat()没有区别,行为完全保持一致。
(4)Number.isInteger( ),用于判断一个数值是否为整数。如果参数不是数值,就会返回false。
Number.isInteger()不会对参数进行类型转换。
(5)Number.EPSILON,常量,表示1与大于1的最小浮点数之间的差。(大于1的最小浮点数表示JS可以表示的最小浮点数)
Number.EPSILON常用来做精度控制。
JavaScript中采用64位存储浮点数,大于1的最小浮点数相当于二进制的1.00…001,其间有连续51个零。
三、Math对象
保存数学公式、信息和计算,提供了一些辅助计算的属性和方法。
1、常见属性
2、常用方法
- min( )与max( ),可以接收任意多个参数。
字符串找最大值不可以用max(),min(),max和min只能接受数值
-舍入方法(把小数舍入为整数) - random( )返回一个0~1之间的随机数,其中包含0但不包含1。
具体用法:(1)Math.floor(Math.random( )*可选整数的总数+最小可能的整数),可从一个最小整数开始的一个范围内选择一个随机整数。
示例:
function randomFrom(lower,upper){
var l = Math.floor(Math.random()*(upper - lower +1 )+lower);
console.log(l);
}
randomFrom(2,5);
- Math.trunc( ),用于去除一个数的小数部分,返回整数部分。
对于非数值,其内部会先使用Number( )转换为数值再操作。
对于空值和无法截取整数的值,返回NaN。
空字符串会返回0而不是NaN
- Math.sign( ),用于判断一个数是正数、负数还是零。**返回值:正数返回为+1,负数返回-1,0返回0,-0返回-0,其他值返回NaN
Math.sign和Math.trunc都会先对非数值参数转换成数值再进行判断 - Math.cbrt( ),用于计算一个数的立方根。
对于非数值,其内部会先使用Number( )转换为数值再操作。
对于空值和无法截取整数的值,返回NaN。 - Math.hypot( ),用于计算所有参数的平方和的平方根。