Skip to content

数值新增特性

新增的二进制和八进制表示方式

js
// 十六进制形式表示数字
0x105;
// 八进制形式表示数字
0o105;

// 二进制形式表示数字
0b1010;

number实例的方法和属性

js
toFixed(num) 参数是数字num,作用是将数字格式化为保留num位小数的字符串(四舍五入)

Number 构造函数本身新增的方法和属性

ES5:

js
Number.MAX_VALUE;		最大的数
Number.MIN_VALUE;		最小的正数

ES6+ (新)

整数在内存中存储原理和浮点的存储原理不一致,浮点的存储方式可以表示更大的数字,但是精度不够。

整数的存储方式就是按照整数,精度准确,也叫做安全整数。

js
Number.MAX_SAFE_INTEGER			读取最大的安全整数
Number.MIN_SAFE_INTEGER			读取最小的安全整数
Number.EPSILION					两个数字间最小差值,就是JS的数字精度			

Number.isNaN()					同全局对象的 isNaN()		
Number.isFinite()				同全局对象的 isFinite()	
Number.parseInt()			    同全局对象的 parseInt()	
Number.parsetFloat()		    同全局对象的 parsetFloat()
Number.isInteger()				判断参数是否是整数,返回布尔值
Number.isSafeInteger()			判断参数是否是安全整数,返回布尔值

案例

js
Number.isInteger(25) // true
Number.isInteger(25.1) // false
Number.isInteger(25.0) // true

// 如果参数不是数值,Number.isInteger返回false。
Number.isInteger() // false
Number.isInteger(null) // false
Number.isInteger('15') // false
Number.isInteger(true) // false

// 这个小数的精度达到了小数点后16个十进制位,转成二进制位超过了53个二进制位,导致最后的那个2被丢弃了。
Number.isInteger(3.0000000000000002) // true 

// 如果一个数值的绝对值小于Number.MIN_VALUE(5E-324),即小于 JavaScript 能够分辨的最小值,会被自动转为 0。
Number.isInteger(5E-324) // false
Number.isInteger(5E-325) // true

Math 对象新增方法

Math的构造函数是Object,是Object的实例,可以直接使用。

ES5(旧):

js
Math.PI			圆周率
Math.abs()		返回绝对值
Math.sqrt()		返回平方根
Math.pow()		返回次方数,两个参数
Math.floor()	返回整数,向下取整
Math,ceil()		返回整数,向上取整
Math.round()	返回整数,四舍五入
Math.random()	返回一个随机数,范围是0到1,0可能会被取到,1不可能。
Math.max()		返回参数中最大的,参数数量可以是任意个
Math.min()		返回参数中最小的,参数数量可以是任意个

ES6+ (新):

js
Math.trunc()	截取数字中的整数部分	
Mthn.sign()		参数是整数返回1,参数是负数返回-1,参数是0返回0	
Mthn.sign()		判断一个数到底是正数、负数、还是零,其他返回 NaN
Math.cbrt()	    返回参数的立方根		
Math.hypot()    返回所有参数的平方和的平方根
js
console.log(Math.trunc(12.23));
console.log('');

console.log(Math.sign(12.45));
console.log(Math.sign(-90));
console.log(Math.sign(0));
console.log('');


console.log(Math.cbrt(8));
console.log(Math.cbrt(10));
console.log('');


console.log(Math.hypot(3, 4));
console.log(Math.hypot(3, 4, 5));

新增原始数据类型 bigint (ES2020)

JavaScript 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制。一是数值的精度只能到 53 个二进制位(相当于 16 个十进制位),大于这个范围的整数,JavaScript 是无法精确表示的,这使得 JavaScript 不适合进行科学和金融方面的精确计算。二是大于或等于2的1024次方的数值,JavaScript 无法表示,会返回Infinity

ES2019 引入了一种新的数据类型 BigInt(大整数),来解决这个问题,这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。

为了与 Number 类型区别,BigInt 类型的数据必须添加后缀n

bigint 数据类型:

js
1. bigint 是一种数据类型,属于原始类型。
2. 使用 typeof 判断,返回 bigint。

bigint 类型的数据的表示方式:

js
// 十进制表示
45n;

// 前面可以加 -,不允许加 + 
-1231231231239182923n;

// 二进制、八进制、十六进制表示
0b101n;
0o75n;
0xab1n;

bigint 类型的数据的特点:

js
1. bigint 类型的数据不能与其他类型进行数学运算符
2. bigint 类型的数据和 number 类型的数据可以互相转换
3. bitint 只能表示整数

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

javascript
42n === 42 // false

bigint 类型的数据的作用:

js
bigint 可以表示的数字范围没有限制,而且计算精度是精确的!

BigInt 可以使用负号(-),但是不能使用正号(+)。

javascript
-42n // 正确
+42n // 报错

symbol 类型

有对象特征的原始类型数据。只能调用不能New。

js
1. symbol 使用原始类型,使用 typeof 判断返回 symbol;
2. 使用 Symbol() 函数创建 symbol 类型的数据,Symbol() 只能调用不能实例化new Symbol;
3. 每使用 Symbol() 创建一个数据,都是独一无二(具有对象特性);
3. symbol 类型的数据可以用作对象的属性名 (属性名可以是字符串或者symbol数据);

在对象中,使用中括号[] 当作表达式

案例

js
// 创建 symbol 类型的数据
let s1 = Symbol();
let s2 = Symbol();

console.log(s1);            //Symbol()
console.log(typeof s1);     //symbol
console.log(s2);            //Symbol()
console.log(s1 === s2);     //false
console.log('');


let s3 = Symbol('xiaole');  // 这里的“xiaole”仅仅作为一个标记,供开发者使用。
let s4 = Symbol('xiaole');
console.log(s3);            //Symbol(xiaole)
console.log(s4);            //Symbol(xiaole)
console.log(s3 === s4);     //false
console.log('');


// 可以作为对象的属性名
const m = 'address';
const user = {
    [m]: '北京',
    [s1]: '上海',
    [s3]: '广州',
    [Symbol()]: '深圳',

}


console.log(user);          //Object对象
console.log(user[s1]);      //上海
console.log(user[s3]);      //广州
console.log(user[Symbol()]);//undefined?

//new Symbol();               //报错 Symbol is not a constructor

const msg = new String('Hello World');
console.log(msg);           //String类型对象 {'Hello World'}

数字间隔符(ES2021)

允许数值直接量中间包含不连续_ ,以提高可读性。分隔符不能在尾部和头部,只能在数字之间,只允许一个下划线作为数字分隔符,不可连续。分隔符不影响数值的类型转换值,也无法在字符串转数值时被识别。

js
123_0000;
12_0000_0000;
12_434_900;