ES6知识点总结(四)
数值与Number
数值
JavaScript数值的特征
• 不区分整数值和浮点数值。
• 所有数值均用浮点数值表示。
• 采用IEEE-754标准定义的64位浮点数格式表示。
整数直接量
除十进制外,JavaScript能识别十六进制(以0x或0X为前缀)、二进制(以0b或0B为前缀)和八进制(以0o或0O为前缀)
浮点数直接量
实数写法:由整数部分、小数点和小数部分组成。如:3.1415926
指数记数法:在实数部分后跟字母e或E,再跟正负号,在跟一个整型的指数。如:5.12e12 -> 5.12×10^12
算术运算
- 运算符,包括:+、-、*、/、%、**(指数运算符,ES6新增)
//指数运算符
let a = 2 ** 3 //2*2*2
console.log(a) //8
//注意,指数运算符按右优先结合
let a = 2 ** 2 **2 // 2**(2**2) ===2**4 ===2*2*2*2
console.log(a) //16
- 溢出(overflow)(当结果超过了JavaScript能表示的数值上限时发生)
超过数值上限时,结果为Infinity,若超过了负数范围,则为-Infinity - 下溢(underflow)
当运算结果无限接近于零,并比JavaScript能表示的最小值还小时发生
JavaScript会返回0,若当一个负数发生下溢时,则返回-0。
注意:
实数有无数个,但JavaScript通过浮点数的形式只能表示其中有限个数
二进制浮点数并不能精确表示类似0.1这样的简单数值。
如:0.3-0.2 ->0.09999999999999998
建议,尽可能使用大整数进行等比修正以避免该类错误。如:3-2
数值转换
3个函数可将非数值转换为数值
Number( )
parseInt( )和parseFloat( )(先转换为字符串,再解析)
Number(undefined) //NaN
Number("011") //11
Number("1.1") //1.1
Number("0xf") //15
Number("") //0
parseInt(22.5) //22
parseInt("0xA") //10
parseInt("A", 16) //10
parseFloat("3.14159e3") //3141.59
Number
创建一个Number对象的构造函数
let num=new Number(10);
常用方法
- toString( ),获得数值对象的字符串表示。
- toLocaleString( ),返回数值对象的字符串本地表示。
- valueOf( ),返回数值对象的原始数值。
- toFixed(n),返回包含指定小数位数的数值字符串。其中,n表示小数位数。
- toExponential(n),返回科学记数法表示的数值字符串。n表示结果中的小数的位数
- toPrecision(n),返回数值最恰当的形式。n表示结果中数字的总位数(不包含指数)
let num = 123;
num.toString(2); //"1111011"
//括号中的2表示进制
let num=new Number(12356);
num.toLocaleString( ) //"12,356"
let num = 100;
num.valueOf( ); //100
let num=new Number(10.005);
num.toFixed(2); //"10.01"
num.toExponential(2); //"1.00e+1"
num.toPrecision(4); //"10.01"
新增方法(新增在Number这个对象上的)
- Number.isFinite( ),用于检查一个数值是否有限的(finite),如果参数类型不是数值,一律返回false
Number.isFinite(15); //true
Number.isFinite(NaN); //false
Number.isFinite(5/0); //false
Number.isFinite(Infinity); //false
Number.isFinite( "foo"); //false
Number.isFinite(true); //false
- Number.isNaN( ),用于检查一个是否为NaN,如果参数类型不是NaN,一律返回false
Number.isNaN(15); //false
Number.isNaN(true); //false
Number.isNaN(NaN); //true
- Number.parseInt( )与Number.parseFloat( ),两种方法和全局方法parseInt( )和parseFloat( )相同
- Number.isInteger( ) 用于判断一个数值是否为整数。如果参数不是数值,返回false
Number.isInteger("23"); //false
Number.isInteger(12.5); //false
Number.isInteger(true); //false
Number.isInteger(12); //true
- Number.EPSILON,常量,表示1与大于1的最小浮点数之间的差
用该值来表示JavaScript的最小精度,从而在浮点数运算时用于确定误差范围。
function withinErrorMargin(left,right) {
//假设误差为2的-50次方
return Math.abs(left - right) < Number.EPSILON * Math.pow(2,2);
}
console.log(0.1 + 0.2 === 0.3); //false
console.log(withinErrorMargin(0.1 + 0.2 === 0.3)); //true
Math对象
保存数学公式、信息和计算,提供了一些辅助计算的属性和方法。
常见属性
常用方法
- min( )与max( ),取最大和最小值,可以接受任意多个参数
let max,min;
max = Math.max(3,5,1,23);
min = Math.min(3,5,1,23);
console.log(max); //23
console.log(min); //1
- 舍入方法(把小数值舍入为整数)
- Math.ceil( ),始终向上舍入为最接近的整数
- Math.floor( ),始终向下舍入最接近的整数
- Math.round( ),执行四舍五入
- Math.fround( ),放回数值最接近的单精度(32位)浮点数表示
Math.ceil(3.4); //4
Math.floor(3.4); //3
Math.round(3.45); //3
Math.fround(3.2); //3.200000047683716
- random( ),返回一个0~1之间的随机数,其中包含0但不包含1
- Math.trunc( ),用于去除一个数的小数部分,返回整数部分
对于非数值,其内部会先使用Number( )转换为数值再操作。
对于空值和无法截取整数的值,返回NaN - Math.sign( ),用于判断一个数是正数、负数还是零。
对于非数值,先将其转换为数值在判断
返回值:
正数:+1;负数:-1;
0:0;-0:-0;
其他值:NaN - Math.cbrt( ),用于计算一个数的立方根。
对于非数值,其内部会先使用Number( )转换为数值再操作。
对于空值和无法截取整数的值,返回NaN - Math.hypot( ),用于计算所有参数的平方和的平方根