一、基本数据类型
- Number : 数字类型
- string : 字符串类型
- Boolean : 布尔类型
- null : 表示没有对象,此处无值
- undefined : 表示缺少值,本来应该有值但没定义
- symbol : 函数可以接受一个字符串作为参数,为新创建的 Symbol 提供描述,用来显示在控制台或者作为字符串的时候使用,便于区分
- BigInt :
BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值。在对大整数执行数学运算时,以任意精度表示整数的能力尤为重要。使用BigInt,整数溢出将不再是问题。
二、引用类型
- Object : 对象
- Function : 函数
- Array : 数组
- Date : 时间
- Error : error对象是JavaScript的原生对象,当程序解析和运行过程中发生了错误,JS引擎就会自动产生并抛出一个error对象的实例,并且程序会终止在错误发生的地方。
- EegExp : 正则
三、基本数据类型和引用数据类型的区别
1.存储位置不一样:
- 值类型(基本数据类型)存储在栈中。
- 引用类型存储在堆中,在栈中存放了地址。
- 拷贝方式不一样:
- 值类型直接赋值就是拷贝。
- 引用类型的变量直接赋值实际上是传递引用地址,只是浅拷贝。
- 值类型无法添加属性和方法,引用类型可以添加属性和方法。
- 值的比较不同:
- 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等 ;
- 引用类型是引用地址的比较(比较的时候==是在比较的时候做了类型转换,而===是值和类型相等才能相等)。
- 在函数中的使用:
- 值类型的变量在函数中被修改时,只在函数作用域内部生效,函数被销毁后此次修改立即失效。
- 引用类型在函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变。
四、检测数据类型的方式
- typeof : 主要检测基本数据类型
- 检测引用类型
A instanceof B返回true或者false
- 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上
- 检测实例对象是不是构造函数创建的,或者是否属于某个祖先构造函数.
- 基本类型 无效
- 检测数据类型最完美的方式
Object.prototype.toString.call()
- 判断数组的方式
1. A instanceof Array
2. Object.prototype.toString.call()
3. Array.isArray()
4. arr.constructor === Array ==> 少,constructor可能会丢失