数值与Number
数值
-
JavaScript数值的特征
- 不区分整数值和浮点数值。
- 所有数值均用浮点数值表示。
- 采用IEEE-754标准定义的64位浮点数格式表示。
- 整数在实际操作时(如数组索引),则是基于32为整数。
-
整数直接量
- 除十进制外,JavaScript能识别十六进制(以0x或0X为前缀)、二进制(以0b或0B为前缀)和八进制(以0o或0O为前缀)。
- 但在ES6的严格模式下,禁止使用八进制。
- 除十进制外,JavaScript能识别十六进制(以0x或0X为前缀)、二进制(以0b或0B为前缀)和八进制(以0o或0O为前缀)。
-
浮点数直接量
- 实数写法:由整数部分、小数点和小数部分组成。
- 指数记数法:在实数部分后跟字母e或E,再跟正负号,在跟一个整型的指数。
-
二进制浮点数与四舍五入错误
- 实数有无数个,但JavaScript通过浮点数的形式只能表示其中有限个数。
-
数值转换
- JavaScript提供了3个函数可将非数值转换为数值。
- Number( )、parseInt( )和parseFloat( )
- JavaScript提供了3个函数可将非数值转换为数值。
-
分析以下表达式的结果
- Number(false)
- Number(null)
- Number(undefined)
- Number(“011”)
- Number(“1.1”)
- Number(“0xf”)
- Number(“”)
- parseInt(22.5)
- parseInt(“0xA”)
- parseInt(“A”, 16)
- parseFloat(“3.14159e3”)
Number
创建一个Number对象的构造函数。
- 如:let num=new Number(10);
常用方法
- 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( )。
- 如:num=99;num.toPrecision(1); num.toPrecision(3);
为了正确的小数位精度表示数值,以上3个方法都会四舍五入。
- Number.isFinite( )
- 用于检查一个数值是否有限的(finite)。
- Number.isNaN( )
isFinite()和isNaN的区别在于,传统方法先调用Number()将非数字转化为数值,再进行判断,而新方法只对数值有效,对于非数值一律返回false。Number.isNaN( )用于检查一个是否为NaN。如果参数类型不是NaN,一律返回false。
Number.parseInt( )与Number.parseFloat( )
- ES6将全局方法parseInt( )和parseFloat( )移植到Number对象中,行为完全保持不变。
Number.parsenInt === parseInt; //true
Number.parseFloat === parseFloat //true
-
Number.isInteger( )
- 用于判断一个数值是否为整数。如果参数不是数值,返回false。在js内部,整点与浮点数同样的储存方法,所有3与3.0被视为同一个值。
Math
常用方法
- min( )与max( )
可以接收任意多个参数。
let max, min;
max = Math.max(3, 33, 13, 43);
console.log(max);
min = Math.min(3, 33, 13, 43);
console.log(min);
let nums = [1, 2, 3, 4, 5, 6];
max = Math.max(...nums);
console.log(max);
- 舍入方法
- 把小数值舍入为整数。
- Math.ceil( ),始终向上舍入为最接近的整数。
- Math.floor( ),始终向下舍入最接近的整数。
- Math.round( ),执行四舍五入。
- Math.fround( ),放回数值最接近的单精度(32位)浮点数表示。
- 把小数值舍入为整数。
- random( )
- 返回一个0~1之间的随机数,其中包含0但不包含1。
- Math.trunc( )
- 用于去除一个数的小数部分,返回整数部分。
- 对于非数值,其内部会先使用Number( )转换为数值再操作。
- 对于空值和无法截取整数的值,返回NaN。
- Math.sign( )
- 用于判断一个数是正数、负数还是零。
- 对于非数值,先将其转换为数值在判断。
- 返回值
- 正数:+1;负数:-1;
- 0:0;-0:-0;
- 其他值:NaN
- Math.cbrt( )
- 用于计算一个数的立方根。
- 对于非数值,其内部会先使用Number( )转换为数值再操作。
- 对于空值和无法截取整数的值,返回NaN。
- Math.hypot( )
- 用于计算所有参数的平方和的平方根。
- 只要有一个参数无法转化为数值,就会返回NaN
BigInt
-
与Number的区别
- 不能用于 Math 对象中的方法;不能和任何 Number 实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。
-
使用 typeof 测试时, BigInt 对象返回 "bigint"
typeof 1n === 'bigint'; // true
typeof BigInt('1') === 'bigint'; // true
- 使用 Object 包装后, BigInt 被认为是一个普通 "object"
typeof Object(1n) === 'object'; // true
当使用 BigInt 时,带小数的运算会被取整。
注意:
被 Object 包装的 BigInts 使用 object 的比较规则进行比较,只用同一个对象在比较时才会相等。