一、数据类型分类:
1.基本数据类型
2.引用数据类型
二、基本数据类型
1. number
- NaN
- Infinity
2. string
3. boolean
4. null
5. undefined
6. symbol
- static Symbol
- Symbol.prototype
7. bigint
三、引用数据类型
1. object
-
普通对象
-
数组对象
-
正则对象
-
日期对象
-
JSON对象
-
Set 、 Map
-
......
2. function
- 普通函数
- 构造函数
- 箭头函数
- 生成器函数
- ······
四、检测数据类型的方法
- typeof
- instance of
- constructor
- 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"