js-数据类型
简介
js基础数据类型有基础数据类型和引用数据类型
一、类型分类
1.基础数据类型
数字Number
字符串String
布尔Boolean
Undefined:字面意思就是未定义的值,一般来自一个表达式最原始的状态值,不是人为操作的结果,所以不要显式的给变量赋undefined。
1.声明未定义的变量,默认值是undefined
2.函数默认返回值是undefined
3.调用函数没有传实参,打印参数为undefined
4.对象没有的属性,打印也是undefined
Null:字面意思就是空值
1.当一个要保存对象的变量还没有真正存放对象,就可以赋值为null,以区分null和undefined,可以理解为它是一个对象引用的占位符,在堆中不占空间
2.当一个数据不再使用时,用null来解除引用,垃圾回收机制会在下次运行时将其回收
Symbol:代表独一无二的值,最大用法就是用来定义对象的唯一属性名
BigInt:可以表示任意大小的整数。Number类型有范围限制,对于非常大的整数将自动四舍五入,存在精度问题,BigInt解决了此问题
2.引用数据类型
object
array
function
二、类型转换
null和undefined进行boolean类型转换后都是false
== 和 ===的区别本质上是会不会进行类型转换
三、类型判断
1.typeof
1 | console.log(typeof undefined); // undefined |
2.instanceof
原理就是顺着原型链去找,a instanceof b,能找到b.prototype,则为true,能判断引用类型,不能判断基础类型。能判断是否属于实例关系,不能判断具体是哪种类型
3.Object.prototype.toString.call(),所有都能判断
1 | Object.prototype.toString.call(2); // "[object Number]" |
4.constructor
1 | // 语法: |
注:null和undefined没有constructor,不能用此方法。函数的constructor不稳定,重写prototype后constructor就变了
5.判断是不是数组
1 | Array.isArray(arr) |
6.判断是不是promise,并不能严格判断是不是promise,只能退而求其次,认为是thenable对象就是promise
1 | val && typeof val.then == 'function' |