1、数据类型的区别

18 阅读3分钟

一、数据类型分类:

1.基本数据类型

2.引用数据类型

二、基本数据类型

1. number

  • NaN
  • Infinity

2. string

3. boolean

4. null

5. undefined

6. symbol

  • static Symbol
  • Symbol.prototype

7. bigint

三、引用数据类型

1. object

  1. 普通对象

  2. 数组对象

  3. 正则对象

  4. 日期对象

  5. JSON对象

  6. Set 、 Map

  7. ......

2. function

  1. 普通函数
  2. 构造函数
  3. 箭头函数
  4. 生成器函数
  5. ······

四、检测数据类型的方法

  1. typeof
  2. instance of
  3. constructor
  4. Object.prototype.toString

五、练习

1. typeof的练习

console.log(typeof 10); // "number"

console.log(typeof NaN); // "number"

console.log(typeof null); // "object"

console.log(typeof undefined); // "undefined"

console.log(typeof Symbol()); // "symbol"

console.log(typeof []); // "object"

console.log(typeof /^$/); // "object"

console.log(typeof function () {}); // "function"

分析:typeof的局限性:typeof 对象 返回的都是字符串"object",它不能细分对象,即不能细分对象是数组还是正则,或是JSON对象等。

2. 为什么typeof不能细分对象?

/*
*typeof的原理:
*    +所有的数据类型值在计算机中存储的都是按照“二进制”存储的
*    +null -> 的二进制是  000000
*    +只要是对象,都是以 000xxx 开始的
*    +typeof检测的时候,是按照计算机的二进制的值来检测的
*/

3. Infinity 、NaN 、undefined 、isNaN 、Object.is()的实用


console.log(Infinity === Infinity); // 无穷大  等于无穷大
// 返回true

console.log(NaN === NaN); // false

console.log(-Infinity === Infinity); // false

let n = 10;
if (!isNaN(n)) {
  console.log('n是有效数字');
}
// isNaN是用来判断n是否是NaN的,是则true,不是则false
// 上述判断返回“n是有效数字”

console.log(Object.is(NaN, NaN)); // true,说明NaN是NaN

4. Symbol的认识和使用(这里仅仅是一部分,其实它的实用度很广)

(1)Symbol的实力对象

console.log(new Symbol()); // 报错
// Uncaught TypeError: Symbol is not a constructor at new Symbol (<anonymous>)

(2)Symbol()是唯一值

console.log(Symbol());
console.log(Symbol() === Symbol()); // 返回false
// 因为是唯一值,所以不存在与其相等的值

****注意这种写法
let tmpt = Symbol();// Symbol()将创建好的唯一值赋值给tmpt
console.log(tmpt === tmpt);// true

(3)Symbol的用途

/**
 * 用途:
 *  + 给对象设置唯一的属性,即唯一值;
 *  + 在vuex/redux中做派发的时候,统一管理派发的行为标识,标识的可以是唯一值
 *  + 。。。
 * 更重要的用途如下:
 *  Symbol.hasInstance 
 *  Symbol.toPrimitive 
 *  Symbol.toStringTag 
 *  Symbol.iterator 
 *  Symbol.isConcatSpreadable 
 *  Symbol.match 
 *  .... 
 */

5. 超大数:bigint、最大安全数、最小安全数

console.log('最大安全数:', Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log('最小安全数:', Number.MIN_SAFE_INTEGER); // -9007199254740991



//超过最大或最小安全数后,计算出的结果就不准确了

console.log(Math.pow(2, 53)); //9007199254740992

console.log(9007199254740992999); // 超过最大的安全数,打印出就会不准确
// 9007199254740993000

console.log(9007199254740992999n); // 超过最大安全数后,要想准确输出表示,需要在后面加一个n
// 9007199254740992999n

console.log(9007199254740992999n + 1n); // 超过最大安全数后,要想相加减,后面都加n
// 9007199254740993000n

// 那么这些超过最大安全数,类型就是“更大数”
console.log(typeof 9007199254740992999n);
// "bigint"