ES6数值多了哪些扩展?

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 类

    原文作者:贵在随心
    原文地址: https://www.jianshu.com/p/bf393951db75
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞