判断js数据类型的常用方法

90 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

前言

之前面试的时候,总是被问如何判断javascript数据类型,当我回答用typeofinstanceof时,总是被问:还有嘛? 其实这两种就是工作中比较常用的,但是回去之后想了想,应该比较有比较常而全的答案。故记录

判断js数据类型的方法.png

数据类型

基本类型

  1. String---字符串
  2. Boolean---布尔类型
  3. Number---数字类型
  4. Null
  5. undefined
  6. ES6新增:Symbol---用于创建一个独一无二的值
  7. ES10新增:BigInt---表示比较大的数值

复杂类型

Object(无序键对值):包括ArrayFunctionDate3种常用的引用类型

存储类型

  • 基本类型存储在中,占据空间小,大小固定,频繁使用
  • 复杂类型存储同时存储在中,值存储在中,指针存储在中,指针存储着值在的地址,赋值给其他对象时复制的是指针,指向同一个内存地址,占据空间大,大小不固定,可修改长度

null和undefined的异同

  • 区别:Null和Undefined都只用一个值,就是null和undefined,null表示空值,不占存储空间,undefined表示未定义的值,存储在栈中
  • 数据类型判别

image.png

判断类型的方法

typeof

  1. 判断Null时会是object,其他都正常

image.png 2. 判断Function会是function,其他都是object

image.png

instanceof

instanceof可以精准判断类型,主要原理是判断构造函数的prototype属性是否在该实例的原型链上

image.png

constructor

主要用于判断函数,当一个函数被定义时,会创建一个prototype属性,在该属性下会添加一个consturctor属性,指向构造函数 结构类型

  • fn
    • prototype
      • constructor 判断结果

image.png

注意

  • null和undefined是无效对象,不存在constructor属性
  • peototype属性很容易被改写,故constructor属性很容易丢失,丢失后会指向Object(Object是所以引用类型的父类)
function F(){}
F.prototype = {}
let f = new F()
f.constructor === F // false
console.log(f.constructor) //function Object(){..}

apply或call

apply和call的功能是改变this指向

image.png

apply使用方法类似