1、二进制和八进制表示方法
二进制:以 0b 或 0B 表示;
console.log(Number(0b111101)); // 61
console.log(Number("0b111101")); // 61
console.log(0b111101 === 61); // true
八进制:在ES5 严格模式中,八进制是不允许使用0 为前缀表示的,而在ES6 中,明确使用 0o 前缀表示的。
console.log(Number(0o567)); // 375
console.log(Number("0o567")); // 375
console.log(0o567=== 375); // true
2、数值Number 方法扩展
判断值是否为有限值:isFinite();
Number.isFinite(18); // true
Number.isFinite('18'); // false
判断值是否为NaN:isNaN();
Number.isNaN(NaN); // true
Number.isNaN('true' / 0); // true
Number.isNaN(13); // false
在ES6 中这两个个方法与ES中的区别在于,传统方法先调用Number() 将非数值转为数值,在进行判断,而新方法只对数值有效,对于非数值一律返回false。
ES6 将全局方法parseInt() 和 parseFloat() 移植到 Number 对象上面,行为完全不变。
Number.parseInt('12.23'); // 12
Number.parseFloat('23.44o'); // 23.44
判断是否为整数:isInteger();
Number.isInteger(12); // true
Number.isInteger(12.0); // true
Number.isInteger(12.2); // false
新增一个极小常量,判断数值是否在某个误差范围内,是否精确:EPSILON,这个值为2-52。
x = 0.2;
y = 0.3;
z = 0.1;
equal = (Math.abs(x - y + z) < Number.EPSILON);
console.log(equal); // true
判断数值是否为安全整数:isSafeInteger();
安全整数的范围在:-(253 – 1)到 253 – 1 之间的整数,包含 -(253 – 1)和 253 – 1。
Number.isSafeInteger(3); // true
Number.isSafeInteger(Math.pow(2, 53)) // false
Number.isSafeInteger(Math.pow(2, 53) - 1) // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true
3、Math 对象的扩展
取数值的整数部分:Math.trunc();
Math.trunc(13.37) // 13
Math.trunc(42.84) // 42
Math.trunc(0.123) // 0
Math.trunc(-0.123) // -0
Math.trunc("-1.123") // -1
Math.trunc(NaN) // NaN
Math.trunc("foo") // NaN
Math.trunc() // NaN
判断数值的类型:Math.sign();
有五种情况判断, 若参数为非数值,会先转换为数值。
(1)参数为正数,返回+1;
(2)参数为负数,返回-1;
(3)参数为0,返回0;
(4)参数为-0; 返回0;
(5)参数为其他值,返回NaN。
Math.sign(3); // 1
Math.sign(-3); // -1
Math.sign("-3"); // -1
Math.sign(0); // 0
Math.sign(-0); // -0
Math.sign(NaN); // NaN
Math.sign("foo"); // NaN
Math.sign(); // NaN
计算数值的立方根:Math.cbrt();
Math.cbrt(NaN); // NaN
Math.cbrt(-1); // -1
Math.cbrt(-0); // -0
Math.cbrt(-Infinity); // -Infinity
Math.cbrt(0); // 0
Math.cbrt(1); // 1
Math.cbrt(Infinity); // Infinity
Math.cbrt(null); // 0
Math.cbrt(2); // 1.2599210498948734
整数使用32位二进制表示: Math.clz32()
Math.clz32(1) // 31
Math.clz32(1000) // 22
Math.clz32() // 32
[NaN, Infinity, -Infinity, 0, -0, null, undefined, "foo", {}, []].filter(function (n) {
return Math.clz32(n) !== 32
}) // []
Math.clz32(true) // 31
Math.clz32(3.5) // 30
32位整数乘法:Math.imul();
Math.imul(2, 4) // 8
Math.imul(2.5, 4) // 8
Math.imul(-1, 8) // -8
Math.imul(-2, -2) // 4
Math.imul(0xffffffff, 5) //-5
Math.imul(0xfffffffe, 5) //-10
将数值转换为单精度浮点值: Math.fround()
Math.fround(0); // 0
Math.fround(1); // 1
Math.fround(1.337); // 1.3370000123977661
Math.fround(1.5); // 1.5
Math.fround(NaN); // NaN
求所有参数的平方和的平方根: Math.hypot();
Math.hypot(3, 4) // 5
Math.hypot(3, 4, 5) // 7.0710678118654755
Math.hypot() // 0
Math.hypot(NaN) // NaN
Math.hypot(3, 4, "foo") // NaN, +"foo" => NaN
Math.hypot(3, 4, "5") // 7.0710678118654755, +"5" => 5
Math.hypot(-3) // 3, the same as Math.abs(-3)
4、对数方法
Math.expm1() 函数返回 Ex – 1, 其中 x 是该函数的参数, E 是自然对数的底数;
Math.expm1(1) // 1.7182818284590453
Math.expm1(-38) // -1
Math.expm1("-38") // -1
Math.expm1("foo") // NaN
Math.log1p() 函数返回一个数字加1后的自然对数 (底为 E), 即log(x+1).
Math.log1p(Math.E-1) // 1
Math.log1p(0) // 0
Math.log1p("0") // 0
Math.log1p(-1) // -Infinity
Math.log1p(-2) // NaN
Math.log1p("foo") // NaN
Math.log10() 函数返回一个数字以 10 为底的对数.
Math.log10(10) // 1
Math.log10(100) // 2
Math.log10("100")// 2
Math.log10(1) // 0
Math.log10(0) // -Infinity
Math.log10(-2) // NaN
Math.log10("foo")// NaN
Math.log2() 函数返回一个数字以 2 为底的对数.
Math.log2(2) // 1
Math.log2(1024) // 10
Math.log2(1) // 0
Math.log2(0) // -Infinity
Math.log2(-2) // NaN
Math.log2("1024")// 10
Math.log2("foo") // NaN
5、指数运算符:**
2 ** 4 // 16
3 ** 3 // 27
与等号结合: **=
let a = 4;
a **= 4;
console.log(a); // 256
等同于 a = aaa*a.
章节目录
1、ES6中啥是块级作用域?运用在哪些地方?
2、ES6中使用解构赋值能带给我们什么?
3、ES6字符串扩展增加了哪些?
4、ES6对正则做了哪些扩展?
5、ES6数值多了哪些扩展?
6、ES6函数扩展(箭头函数)
7、ES6 数组给我们带来哪些操作便利?
8、ES6 对象扩展
9、Symbol 数据类型在 ES6 中起什么作用?
10、Map 和 Set 两数据结构在ES6的作用
11、ES6 中的Proxy 和 Reflect 到底是什么鬼?
12、从 Promise 开始踏入异步操作之旅
13、ES6 迭代器(Iterator)和 for…of循环使用方法
14、ES6 异步进阶第二步:Generator 函数
15、JavaScript 异步操作进阶第三步:async 函数
16、ES6 构造函数语法糖:class 类