一、bigInt:

 BigInt是一种新的数据类型,用于当整数值大于Number数据类型所支持的 范围时。这种数据类型允许我们安全地对 大整数 执行算数操作,表示高分辨率的时间戳、

使用大整数id等等,而不需要使用库去处理大整数。

 

Js中的Number类型只能安全地表示(-(2^53 - 1)) 到((2^53-1)),任何超出此范围的整数值都可能失去精度。因此会出现一些安全性的问题。

 

 

如何创建并使用BigInt:

创建:只需要在数值末尾追加n即可。

console.log(9999999999999999999999999999n);

console.log(9999999999999999999999999999);

 

另一种创建:BigInt('99999999999999999999999');

 

简单使用:

10n+20n  // ->  30n

10n-20n // -> -10n

+10n //  ->typeError

-10n //  -> -10n

10n * 20n  // -> 200n

20n / 10n // -> 2n

23n % 10n  // -> 3n

10n ** 3n // -> 1000n

 

const a = 10n;

++x; // ->  11n;

--x; //  9n

console.log(typeof a);  // ->  "bigint"

 

由以上示例可以知道+10n会报错,这是因为 + 符号的特殊性,对于所有类型的参数与 +号一起使用时,其实相当于是在与number值做加法;

如  + new Date() 可以获取当前的时间戳: new Date()会转换为Number;

因此+ 10n 要把10n转换为number,但是由于这个隐式类型转换可能丢失信息,所以不允许在bigInt和number之间进行转换。所以会报typeerror。

如下:10 + 10n 也会报typeerror,math.max(2n, 4n)也会报typeerror(max函数要求传入的参数是number)。

 

 

当boolean和bigInt类型相遇时,bigInt的处理方式与number一样,即除了0n,其他bigInt都是ture。

if(3n) {}  // -> true

if(0n) {}  // -> false

 

 

 

 

 

二、使用typeof和instanceof来判断数据类型

1.typeof:

首先使用typeof判断基础数据类型:

typeof 1  // 'number'

typeof '1'  // 'string'

typeof undefined  // 'undefined'

typeof true  // 'boolean'

typeof Symbol() // 'symbol'

typeof 10n // 'bigInt'

typeof null // 'object'  

结论——> 基础数据类型中除了null,其他基础数据类型都可以调用typeof显示正确的类型。

 

但对于引用数据类型,除了函数之外,都会显示'object',

 

typeof []  // -> 'object'

typeof {} // -> 'object'

typeof console.log // 'function'

 

因此采用typeof判断对象数据类型是不合适的,采用instanceof会更好,instanceof的原理是基于原型链的查询,只要

处于原型链中,判断永远为true。

对于所有基础数据类型,使用instanceof返回的值为false。因此使用instanceof可以很好的去判断基础数据类型。