数据类型判断

116 阅读2分钟

基本类型存在栈中,引用类型存在堆中

基本类型(String、Number、Boolean、Null、Undefined、Symbol、BigInt)

其中 Symbol 和 BigInt 是 ES6 新增的数据类型

Symbol 代表独一无二的值,最大的用法是用来定义对象的唯一属性名。

BigInt 可以表示任意大小的整数。

1、typeof(用来判断基本数据类型)

语法:typeof 目标数据

typeof ‘sss’ // 'string'
typeof 111 // 'number'
typeof true // 'boolean'
typeof undefined // 'undefined'
typeof null // 'object'
typeof [] // 'object'
typeof {} // 'object'

typeof可以判断除null之外的基本数据类型,引用类型不能判断数组和对象,但是可以判断function。

2、Instanceof(用来判断引用类型)

语法:A instanceof B A是B的实例 (A是目标数据)

     Const arr1 = [] 
     arr1 instanceof Array  //true

     [] instanceof Object // true
      // window, instanceof只有一个全局window,才会返回true
      // 拿到iframe内部的数组判断会有问题,会返回false

instanceof可以判断引用类型的数组和对象,但是不能判断基本数据类型。

3、最准确的判断数据类型的方法:Object.prototype.toString.call(目标数据)

call改变目标数据的this指向,让目标数据去调用Object.prototype的toString方法。

Object.prototype.toString.call(111) // [Object Number]
Object.prototype.toString.call(‘dasd’) // [Object String]
Object.prototype.toString.call(null) // [Object Null]
Object.prototype.toString.call(undefined) // [Object Undefined]
Object.prototype.toString.call(true) // [Object Boolean]
Object.prototype.toString.call([]) // [Object Array]

typeof与instanceof区别

typeof与instanceof都是判断数据类型的方法,区别如下:

  • typeof返回一个变量的基本数据类型,instanceof返回的是一个布尔值
  • instanceof可以正确判断引用数据类型([]、{}),但不能准确判断基本数据类型
  • typeof也存在弊端,它可以正确判断基本数据类型(null除外),但是引用数据类型中,除了function以外,其他的也无法判断
  • 通用检测数据类型,可以采用Object.prototype.toString,调用该方法,统一返回格式“[object Xxx]” 的字符串

Array.isArray()ES6新增