ECMAScript 6 学习之路 ( 五 ) 数值的扩展

本文介绍了JavaScript中二进制和八进制数字的声明方法,包括数字验证、转换及判断等实用技巧。此外还详细讲解了ES6中提供的数学对象扩展功能,如整数取值范围、安全整数判断等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二进制和八进制数字的声明并不是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值