二进制和八进制数字的声明并不是ES6的特性,我们只是做一个常识性的回顾.
二进制
二进制的英文单词是Binary
,二进制的开始是0(零)
,然后第二个位置是b
(注意这里大小写都可以实现
),然后跟上二进制的值就可以了。
let b = 0B010101;
console.log(b); // 21
八进制
八进制的英文单词是Octal
,也是以0(零)
开始的,然后第二个位置是O(欧)
,然后跟上八进制的值就可以了。
let o = 0O666;
console.log(o); // 438
数字转换和判断
可以使用Number.isFinite( )
来进行数字验证
,只要是数字,不论是浮点型还是整形都会返回true,其他时候会返回false。
let a = 11/6;
Number.isFinite(a);//true
console.log(Number.isFinite('zjj'));//false
console.log(Number.isFinite(NaN));//false
console.log(Number.isFinite(undefined));//false
NaN验证
NaN是特殊的非数字,可以使用Number.isNaN()来进行验证
Number.isNaN(NaN);// true
判断是否为整数Number.isInteger(xx)
Number.isInteger(122);// true
Number.isInteger(122.3333);// false
整数转换ParseInt()
let a='9.18'; // String类型
console.log(Number.parseInt(a)); // 转换为整形
console.log(Number.parseFloat(a));// 转换为浮点型
// 9
// 9.18
整数取值范围操作
整数的操作是有一个取值范围的,它的取值范围就是2的53次方
。我们先用程序来看一下这个数字是什么。
let a = Math.pow(2,53)-1;
console.log(a); //9007199254740991
在我们计算时会经常超出这个值,所以我们要进行判断,ES6提供了一个常数,叫做最大安全整数,以后就不需要我们计算了。
最大安全数和最小安全数
console.log(Number.MAX_SAFE_INTEGER);
console.log(Number.MIN_SAFE_INTEGER);
安全整数判断isSafeInteger()
let a= Math.pow(2,53)-1;
console.log(Number.isSafeInteger(a));//true
{
let a= 121212121312312312312312313123123;
console.log(Number.isSafeInteger(a)); // false
}
{
let a= 1212121;
console.log(Number.isSafeInteger(a)); // true
}
Math 对象的扩展
Math.trunc()
Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
// 对于非数值型先转换为数值
Math.trunc('123.456') // 123
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0
// 不支持trunc的情况下
Math.trunc = Math.trunc || function(x) {
return x < 0 ? Math.ceil(x) : Math.floor(x);
// Math.ceil() 是上舍入
// Math.floor() 是下舍入
};
Math.sign()
判断是正数、负数、0, 如果不是数值先转换为数值
// 参数为正数,返回+1;
// 参数为负数,返回-1;
// 参数为 0,返回0;
// 参数为-0,返回-0;
// 其他值,返回NaN。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.sign('') // 0
Math.sign(true) // +1
Math.sign(false) // 0
Math.sign(null) // 0
Math.sign('9') // +1
Math.sign('foo') // NaN
Math.sign() // NaN
Math.sign(undefined) // NaN
Math.sign = Math.sign || function(x) {
x = +x; // convert to a number
if (x === 0 || isNaN(x)) {
return x;
}
return x > 0 ? 1 : -1;
};
Math.cbrt()
计算立方根
Math.cbrt(-1) // -1
Math.cbrt(0) // 0
Math.cbrt(1) // 1
Math.cbrt(2) // 1.2599210498948734
Math.cbrt = Math.cbrt || function(x) {
var y = Math.pow(Math.abs(x), 1/3);
return x < 0 ? -y : y;
};
指数运算符
ES6新增
2 ** 2 // 4
2 ** 3 // 8
3 ** 2 // 9
指数运算符可以与等号结合,形成一个新的赋值运算符(**=)。
let a = 1.5;
a **= 2;
// 等同于 a = a * a;
let b = 4;
b **= 3;
// 等同于 b = b * b * b;
在V8引擎中,Math.pow() 与 **实现方式不同,对于特别大的数,可能会有一些区别
Math.pow(99, 99)
// 3.697296376497263e+197
99 ** 99
// 3.697296376497268e+197