JavaScript高阶——ES6学习笔记

JavaScript高阶——ES6学习笔记

4.数值与Number

数值

数值的特征

  1. 不区分整数值和浮点数值。
  2. 所有数值均用浮点数值表示。
  3. 采用IEEE-754标准定义的64位浮点数格式表示。
  4. 整数在实际操作时(如数组索引),则是基于32为整数。

整数直接量

  1. 除十进制外,JavaScript能识别十六进制(以0x或0X为前缀)、二进制(以0b或0B为前缀)和八进制(以0o或0O为前缀)。
    如:0xff = >255,0b1001 => 9,0o12 => 10
  2. 但在ES6的严格模式下,禁止使用八进制。

浮点数直接量

  1. 实数写法:由整数部分、小数点和小数部分组成。
    如:3.1415926
  2. 指数记数法:在实数部分后跟字母e或E,再跟正负号,在跟一个整型的指数。
    如:5.12e12 => 5.12×1012,1.44E-8 => 1.44×10-8

算术运算

  1. 运算符
    包括:+-、***、/、%、 **(指数操作符,ES6新增)。
  2. 溢出(overflow)
    当数值运算结果超过了JavaScript能表示的数值上限时发生。
    结果为Infinity,若超过了负数范围,则为-Infinity。
    基于±Infinity的加、减、乘、除等算术运算结果依然是±Infinity。
    eg:Infinity/Infinity=NaN
  3. 下溢(underflow)
    当运算结果无限接近于零,并比JavaScript能表示的最小值还小时发生。
    JavaScript会返回0,若当一个负数发生下溢时,则返回-0。
  4. 被零整除
    简单的返回±Infinity。
    eg:0/0 =NaN

二进制浮点数与四舍五入 错误

  1. 实数有无数个,但JavaScript通过浮点数的形式只能表示其中有限个数
  2. 当JavaScript使用实数时,常常只是真实值的一个近似表示。
  3. IEEE-754浮点数表示法是一种二进制表示法,可以精确地表示分数。如:1/2、1/8和1/1024等。
    但常用的分数都是十进制分数,二进制浮点数并不能精确表示类似0.1这样的简单数值。
    如:0.3-0.2 => 0.09999999999999998
  4. 任何使用二进制浮点数的编程语言中都会有这个问题。
    建议,尽可能使用大整数进行等比修正以避免该类错误。如:3-2。

数值转换

JavaScript提供了3个函数可将非数值转换为数值

  1. Number( )。Number() 函数把对象的值转换为数字。
  2. parseInt( )。parseInt() 函数可解析一个字符串,并返回一个整数。
  3. parseFloat( )。parseFloat() 函数可解析一个字符串,并返回一个浮点数。该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串。

Number

定义:对应与数值的应用类型;创建一个Number对象的构造函数。

常用方法
toString( ),返回数值对象的字符串表示。
如:num.toString(); num.toString(2);

toLocaleString( ),返回数值对象的字符串本地表示。
如:num=new Number(12356); num.toLocaleString( );

valueOf( ),返回数值对象的原始数值。
如:num.valueOf( );

toFixed(n),返回包含指定小数位数的数值字符串。
其中,n表示小数位数。
如:num.toFixed(2); num=new Number(10.005); num.toFixed(2);

toExponential(n),返回科学记数法表示的数值字符串。
其中,n表示结果中的小数的位数。
如:num=123;num.toExponential(1); num.toExponential(3);

toPrecision(n),返回数值最恰当的形式。
其中,n表示结果中数字的总位数(不包含指数)。
如:num=99;num.toPrecision(1); num.toPrecision(3);
本质上,它会根据数值和精度来确定调用toFixed( )还是toExponential( )。为了正确的小数位精度表示数值,以上3个方法都会四舍五入

Number.isFinite( )
用于检查一个数值是否有限的(finite)。如果参数类型不是数值,一律返回false。
如:Number.isFinite(15);Number.isFinite(NaN);Number.isFinite("foo");

Number.isNaN( )
用于检查一个是否为NaN。如果参数类型不是NaN,一律返回false。
如:Number.isNaN(false);Number.isNaN(null);Number.isNaN("15");

Number.parseInt( )与Number.parseFloat( )
ES6将全局方法parseInt( )和parseFloat( )移植到Number对象中,行为完全保持不变。

Number.isInteger( )
用于判断一个数值是否为整数。如果参数不是数值,返回false。
如:Number.isInteger(“15”) ;Number.isInteger(12);Number.isInteger(12.0);Number.isInteger(12.1)

Number.EPSILON
常量,表示1与大于1的最小浮点数之间的差。
意义
JavaScript中采用64位存储浮点数,大于1的最小浮点数相当于二进制的1.00…001,其间有连续51个零。
这个值减去 1 之后,就等于 2 的 -52 次方。
实际上用该值来表示JavaScript的最小精度,从而在浮点数运算时用于确定误差范围
JavaScript高阶——ES6学习笔记_第1张图片

Math对象

保存数学公式、信息和计算,提供了一些辅助计算的属性和方法。
JavaScript高阶——ES6学习笔记_第2张图片

常用方法

min( )与max( )
可以接收任意多个参数。

 let max, min;
  max = Math.max(3, 33, 13, 43);
  console.log(max);//43
  min = Math.min(3, 33, 13, 43);
  console.log(min);//3
  let nums = [1, 2, 3, 4, 5, 6];
  max = Math.max(...nums);
  console.log(max);//6

舍入方法
把小数值舍入为整数。
Math.ceil( ),始终向上舍入为最接近的整数。
Math.floor( ),始终向下舍入最接近的整数。
Math.round( ),执行四舍五入的规则,返回最近的整数。
Math.fround( ),放回数值最接近的单精度(32位)浮点数表示。
random( ) ,返回一个0~1之间的随机数,其中包含0但不包含1。

Math对象扩展

Math.trunc( )
用于去除一个数的小数部分,返回整数部分。
对于非数值,其内部会先使用Number( )转换为数值再操作。
对于空值和无法截取整数的值,返回NaN。

Math.sign( )
用于判断一个数是正数、负数还是零。
对于非数值,先将其转换为数值在判断。
返回值
正数:+1;负数:-1;
0:0;-0:-0;
其他值:NaN;
Math.cbrt( )
用于计算一个数的立方根。
对于非数值,其内部会先使用Number( )转换为数值再操作。
对于空值和无法截取整数的值,返回NaN。
Math.hypot( )
用于计算所有参数的平方和的平方根。
如:Math.hypot(3, 4)=>5.

拓展:

ES10新增了一种数据类型BigInt
BigInt 是一种内置对象,它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。
描述:可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数BigInt()。

它在某些方面类似于 Number ,但是也有几个关键的不同点:不能用于 Math 对象中的方法;不能和任何 Number 实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。

你可能感兴趣的:(学习笔记,javascript)