es6之数值的扩展方法

1.二进制、八进制、十六进制的表示方法

二进制:0b(或0B)
八进制:0o(或0O)
十六进制:0x(或0X)

        console.log(0b10===2) //true
        console.log(0o10===8) //true
        console.log(0x10===16) //true

使用Number函数可将其他进制的数值转换为10进制
其他进制的数值进行运算时,会先将其转换成10进制数,再进行运算

        console.log(Number(0b10))   //2
        console.log(Number(0o10))   //8
        console.log(Number(0x10))   //16
        console.log(0b10+0x10)  //18

2.数值分隔符

es6规定,js的数值可以使用下划线(_)作为数值分隔符
这个数值分隔符没有指定间隔的位数

        console.log(10000000===10_0_0_0000)  //true

小数和科学计数法也可以使用数值分隔符

        console.log(0.000_00_1===0.000001)  //true
        console.log(1e10_0_00===1e10000)  //true

注意:
不能放在数值的最前面(leading)或最后面(trailing)。
不能两个或两个以上的分隔符连在一起。
小数点的前后不能有分隔符。
科学计数法里面,表示指数的e或E前后不能有分隔符。

除了十进制,其他进制的数值也可以使用分隔符。

        console.log(0b1010_0001_10_000_101===0b1010000110000101)    //true

注意:分隔符不能紧跟着进制的前缀
数值分隔符只是一种数值便于读写的操作,不影响内部数值的存储和输出。

        let num = 10_000;
        console.log(num.toString()) //10000
//注意:Number()、parseInt()、parseFloat()这三种方法不支持数值分隔符
        console.log(Number('10_000') ) //NaN
        console.log(parseInt('10_000')) //10

3.Number.isFinite(), Number.isNaN()

Number.isFinite()检查数值是否有限
Number.isNaN()检查一个值是否为NaN

与传统方法isFinite()和isNaN()不同的是,传统方法是先调用Number()将非数值的值转化位数值。

        console.log(isFinite('666'))    //true
        console.log(Number.isFinite('666'))     //false
        console.log(isNaN("NaN"))    //true
        console.log(Number.isNaN("NaN"))     //false

4.Number.parseInt(), Number.parseFloat()

与传统方法parseInt()和parseFloat()效果一样,这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。

        // ES5的写法
        console.log(parseInt('3.21')) //3
        console.log(parseFloat('3.45.66'))  //3.45

        // ES6的写法
        console.log(Number.parseInt('3.21'))   //3
        console.log( Number.parseFloat('3.45.66'))  //3.45

5.Number.isInteger()

Number.isInteger()方法用来判断一个数值是否为整数

        console.log(Number.isInteger(6))    //true
        console.log(Number.isInteger(6.26))     //false
        console.log(Number.isInteger(6.00))     //true
//如果参数不是数值,Number.isInteger则会返回false

6.Number.EPSILON

ES6 在Number对象上面,新增一个极小的常量Number.EPSILON
 

        console.log(Number.EPSILON === Math.pow(2, -52))    //true

7.安全整数和 Number.isSafeInteger()

js能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。

        console.log(Math.pow(2, 53) === Math.pow(2, 53) + 1)    //true
//Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内。
        console.log(Number.isSafeInteger(Infinity))   // false
        console.log(Number.isSafeInteger(6))   // true

8.Math 对象的扩展

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

        console.log(Math.trunc(66.669)) //66
        console.log(Math.trunc('66.669')) //66
        console.log(Math.trunc()) //NaN

Math.sign() 方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

        console.log(Math.sign('2'))     //1
        console.log(Math.sign('0'))     //0
        console.log(Math.sign('-2'))    //-1
        console.log(Math.sign(''))      //0
        console.log(Math.sign('qqq'))   //NaN

Math.cbrt()方法用于计算一个数的立方根。

        console.log(Math.cbrt('-8'))    //-2
        console.log(Math.cbrt('8'))    //2
        console.log(Math.cbrt('3'))    //1.4422495703074083
        console.log(Math.cbrt('ghh'))    //NaN

Math.hypot()方法返回所有参数的平方和的平方根

        let a = Math.hypot(3,4)
        console.log(a)  //5
        //如果参数不是数值,Math.hypot方法会将其转为数值。只要有一个参数无法转为数值,就会返回 NaN。

9.BigInt数据类型

JavaScript 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制。


1.数值的精度只能到 53 个二进制位(相当于 16 个十进制位),大于这个范围的整数,JavaScript 是无法精确表示。
        const a = 9000000000000000000003;
        const b = 9000000000000008;
        console.log(a*b) //8.100000000000008e+37
        //很显然上面的计算结果精度丢失
2.大于或等于2的1024次方的数值,JavaScript 无法表示,会返回Infinity。
        const a = Math.pow(2, 1024);
        console.log(a) //Infinity

BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。

        const a = 9000000000000000000003n;
        const b = 9000000000000008n;
        console.log(a*b) //81000000000000072000027000000000000024n

为了与 Number 类型区别,BigInt 类型的数据可以使用各种进制表示,但必须添加后缀n。

        0b1101n // 二进制
        0o777n // 八进制
        0xFFn // 十六进制

BigInt 与普通整数是两种值,它们之间并不相等。

        console.log(1n == 1) //true
        console.log(1n === 1) //false

typeof运算符对于 BigInt 类型的数据返回bigint。  

        console.log(typeof 1) //number
        console.log(typeof 1n) //bigint

只能使用正号(+),不能使用负号(-)

        console.log(-42n) //-42n
        console.log(+42n) //Uncaught TypeError: Cannot convert a BigInt value to a number

BigInt 类型的数据可以表示出2的1024次方

        //Number类型
        let p = 2;
        for (let i = 1; i <= 1025; i++) {
            p *= 2;
        }
        console.log(p); // Infinity
        //BigInt类型
        let p = 2n;
        for (let i = 1; i <= 1025; i++) {
            p *= 2n;
        }
        console.log(p); //71907725394492636309172207631560989344719079157692262909372032463093070322200385253083390//92896301440844804555194855734306351590752576664899713897225578964975110715736994619411052//08878404984376477812331808340023075352602729369851525895652442163308948653402042738345192//959788983753918865219341425318496896548864n

10.BigInt 函数

js提供BigInt函数,可以用它生成 BigInt 类型的数值。

        console.log(BigInt(666)) //666n
        console.log(BigInt('666')) //666n
        console.log(BigInt(false)) //0n
        console.log(BigInt(true)) //0n

BigInt()函数必须有参数,而且参数必须可以正常转为数值,否则会报错

        console.log(BigInt()) //Cannot convert undefined to a BigInt
        console.log(BigInt(null)) //Cannot convert null to a BigInt
        console.log(BigInt('666a')) // Cannot convert 666a to a BigInt
        console.log(BigInt('1.5')) // Cannot convert 666a to a BigInt
        console.log(BigInt('1.5')) //Cannot convert 1.5 to a BigInt

BigInt.prototype.toString()方法

        console.log(123n.toString()) //123
        console.log(typeof 123n.toString()) //string

BigInt.prototype.valueOf()

        console.log(123n.valueOf()) //123n
        console.log(typeof 123n.valueOf()) //bigint

BigInt.prototype.toLocaleString()

        console.log(126666663n.toLocaleString()) //126,666,663
        console.log(typeof 125555553n.toLocaleString()) //string

数据转换规则

可以使用Boolean()、Number()和String()这三个方法,将 BigInt 可以转为布尔值、数值和字符串类型。

        Boolean(0n) // false
        Boolean(1n) // true
        Number(1n) // 1
        String(1n) // "1"

另外,取反运算符(!)也可以将 BigInt 转为布尔值。

        console.log(!0n) // true
        console.log(!1n) // false

数学运算方面,BigInt 类型的+、-、*和**这四个二元运算符,与 Number 类型的行为一致。
除法运算/会舍去小数部分,返回一个整数。
注意:
BigInt 不能使用不带符号的右移位运算符>>>
BigInt 不能使用一元的求正运算符+
BigInt 不能与普通数值进行混合运算。
BigInt 对应的布尔值,与 Number 类型一致,即0n会转为false,其他值转为true。

        if (0n) {
            console.log('if');
        } else {
            console.log('else');
        }
        // else

比较运算符(比如>)和相等运算符(==)允许 BigInt 与其他类型的值混合计算,因为这样做不会损失精度。

        console.log(0n < 1) //true
        console.log(0n < true)  //true
        console.log(0n == 0)    //true
        console.log(0n == false) //true
        console.log(0n === 0)   //false

BigInt 与字符串混合运算时,会先转为字符串,再进行运算

 console.log(123n+'哈哈')

ES6 引入了一些数值扩展,其中包括了新的数值类型(如二进制和八进制)、新的数学方法和常量。 1. 二进制和八进制 在 ES6 中,我们可以使用 `0b` 或 `0B` 前缀来表示二进制数,使用 `0o` 或 `0O` 前缀来表示八进制数。例如: ```javascript let binary = 0b1010; // 二进制的 10 let octal = 0o777; // 八进制的 511 ``` 2. Number.isFinite() `Number.isFinite()` 方法用于检查一个数值是否为有限数。与全局的 `isFinite()` 函数不同的是,`Number.isFinite()` 不会将非数值转换为数值。例如: ```javascript Number.isFinite(Infinity); // false Number.isFinite(-Infinity); // false Number.isFinite(NaN); // false Number.isFinite(123); // true ``` 3. Number.isNaN() `Number.isNaN()` 方法用于检查一个数值是否为 NaN。与全局的 `isNaN()` 函数不同的是,`Number.isNaN()` 只有在参数是数值且等于 NaN 时才返回 true。例如: ```javascript Number.isNaN(NaN); // true Number.isNaN('hello'); // false Number.isNaN(123); // false ``` 4. Number.parseInt() `Number.parseInt()` 是 `parseInt()` 的一个新的方法,它将字符串转换为整数,并且只接受数字作为字符串的参数。例如: ```javascript Number.parseInt('123'); // 123 Number.parseInt('123.45'); // 123 Number.parseInt('hello'); // NaN ``` 5. Number.parseFloat() `Number.parseFloat()` 是 `parseFloat()` 的一个新的方法,它将字符串转换为浮点数,并且只接受数字作为字符串的参数。例如: ```javascript Number.parseFloat('3.14'); // 3.14 Number.parseFloat('3.14hello'); // 3.14 Number.parseFloat('hello'); // NaN ``` 6. Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER `Number.MAX_SAFE_INTEGER` 和 `Number.MIN_SAFE_INTEGER` 属性分别表示 JavaScript 中最大的安全整数和最小的安全整数。例如: ```javascript Number.MAX_SAFE_INTEGER; // 9007199254740991 Number.MIN_SAFE_INTEGER; // -9007199254740991 ``` 7. Number.isSafeInteger() `Number.isSafeInteger()` 方法用于检查一个数值是否为安全整数。安全整数是指符合以下两个条件的整数: - 在 JavaScript 中能够精确表示。 - 绝对值不大于 `Number.MAX_SAFE_INTEGER`。 例如: ```javascript Number.isSafeInteger(123); // true Number.isSafeInteger(9007199254740992); // false,超出了安全整数范围 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值