数据类型与数据类型检测

76 阅读2分钟

一、基本数据类型

  1. Number : 数字类型
  2. string : 字符串类型
  3. Boolean : 布尔类型
  4. null : 表示没有对象,此处无值
  5. undefined : 表示缺少值,本来应该有值但没定义
  6. symbol : 函数可以接受一个字符串作为参数,为新创建的 Symbol 提供描述,用来显示在控制台或者作为字符串的时候使用,便于区分
  7. BigInt : BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值。在对大整数执行数学运算时,以任意精度表示整数的能力尤为重要。使用BigInt,整数溢出将不再是问题。

二、引用类型

  1. Object : 对象
  2. Function : 函数
  3. Array : 数组
  4. Date : 时间
  5. Error : error对象是JavaScript的原生对象,当程序解析和运行过程中发生了错误,JS引擎就会自动产生并抛出一个error对象的实例,并且程序会终止在错误发生的地方。
  6. EegExp : 正则

三、基本数据类型和引用数据类型的区别

1.存储位置不一样:

  • 值类型(基本数据类型)存储在中。
  • 引用类型存储在中,在栈中存放了地址。
  1. 拷贝方式不一样:
  • 值类型直接赋值就是拷贝
  • 引用类型的变量直接赋值实际上是传递引用地址,只是浅拷贝
  1. 值类型无法添加属性和方法,引用类型可以添加属性和方法。
  2. 值的比较不同:
  • 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等 ;
  • 引用类型引用地址的比较(比较的时候==是在比较的时候做了类型转换,而===是值和类型相等才能相等)。
  1. 在函数中的使用:
  • 值类型的变量在函数中被修改时,只在函数作用域内部生效,函数被销毁后此次修改立即失效
  • 引用类型在函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变

四、检测数据类型的方式

  1. typeof : 主要检测基本数据类型
  • image.png
  1. 检测引用类型 A instanceof B 返回true或者false
  • 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上
  • 检测实例对象是不是构造函数创建的,或者是否属于某个祖先构造函数.
  • 基本类型 无效
  • image.png
  1. 检测数据类型最完美的方式
  • Object.prototype.toString.call()
  • image.png
  1. 判断数组的方式
 1. A instanceof Array
 2. Object.prototype.toString.call()
 3. Array.isArray()
 4. arr.constructor === Array ==> 少,constructor可能会丢失