js判断数据类型常用的方法,不论在开发中开始在面试中,都是经常遇到的问题,尤其是在面试时,当面试官问及js判断数据类型的方法时,回答的越多,说明掌握的广度跟深度越多,感觉自己逼格也越高.废话不多说了,进入正题

  1. 面试常问,基本数据类型有哪些,number,string,boolean,null,undefined,symbol以及未来ES10新增的BigInt(任意精度整数)七类。
  2. 引用数据类型(Object类)有常规名值对的无序对象{a:1},数组[1,2,3],以及函数等。

常见的判断js数据类型的方法有如下几种

1.最常见的判断方法:typeof

2.已知对象类型:   instanceof 

3.对象原型链判断方法: prototype 通用但很繁琐

4.根据对象的构造器constructor进行判断

5.jQuery方法: jquery.type()

6.严格运算符:   ===

下面依次说下每个方法的写法跟结果

一.typeof

其中typeof返回的类型都是字符串形式,需注意!!!!!

用于判断数据类型,返回值为6个字符串,分别为string、Boolean、number、function、object、undefined。

  var a = [34,4,3,54],b = 34,c = 'adsfas',d = function(){console.log('我是函数')},e = true,f = null,g;console.log(typeof(a));//objectconsole.log(typeof(b));//numberconsole.log(typeof(c));//stringconsole.log(typeof(d));//functionconsole.log(typeof(e));//booleanconsole.log(typeof(f));//objectconsole.log(typeof(g));//undefined

但是你可能会发现,typeof在判断null、array、object以及函数实例(new + 函数)时,得到的都是object。这使得在判断这些数据类型的时候,得不到真是的数据类型。由此引出instanceof。

二.instance of

注意:instanceof 后面一定要是对象类型,并且大小写不能错。

[1,2,3] instanceof Array                -------->true
new Date() instanceof Date              -------->true
new Function() instanceof Function      -------->true
new Function() instanceof function      -------->false
null instanceof Object                  -------->false

三.对象原型链判断方法: Object.prototype.toString.call()

适用于所有类型的判断检测,注意区分大小写. toString方法,在Object原型上返回数据格式,

 console.log(Object.prototype.toString.call("123"))           -------->[object String]console.log(Object.prototype.toString.call(123))             -------->[object Number]console.log(Object.prototype.toString.call(true))            -------->[object Boolean]console.log(Object.prototype.toString.call([1, 2, 3]))       -------->[object Array]console.log(Object.prototype.toString.call(null))            -------->[object Null]console.log(Object.prototype.toString.call(undefined))       -------->[object Undefined]console.log(Object.prototype.toString.call({name: 'Hello'})) -------->[object Object]console.log(Object.prototype.toString.call(function () {}))  -------->[object Function]console.log(Object.prototype.toString.call(new Date()))      -------->[object Date]console.log(Object.prototype.toString.call(/\d/))            -------->[object RegExp]console.log(Object.prototype.toString.call(Symbol()))        -------->[object Symbol]

四.根据对象的constructor进行判断

constructor 判断方法跟instanceof相似,但是constructor检测Object与instanceof不一样,constructor还可以处理基本数据类型的检测,不仅仅是对象类型

注意:

1.null和undefined没有constructor;

2.判断数字时使用(),比如  (123).constructor,如果写成123.constructor会报错

3.constructor在类继承时会出错,因为Object被覆盖掉了,检测结果就不对了

 //注意当出现继承的时候,使用constructor会出现问题function A() {};function B() {};A.prototype = new B(); //A继承自Bconsole.log(A.constructor === B)  -------->falsevar C = new A();//现在开始判断C是否跟A的构造器一样console.log(C.constructor === B)  -------->trueconsole.log(C.constructor === A)  -------->false //解决这种情况,通常是手动调整对象的constructor指向C.constructor = A; //将自己的类赋值给对象的constructor属性console.log(C.constructor === A);  -------->trueconsole.log(C.constructor === B);  -------->false

五.jQuery方法: jquery.type()

据说是无敌万能的方法.如果对象是null跟undefined,直接返回"null"和"undefined",

注意:在使用时,一定要引入jquery文件,不然会报错,jQuery is not defined

   console.log(jQuery.type(undefined) === "undefined")           -------->trueconsole.log(jQuery.type() === "undefined");                   -------->trueconsole.log(jQuery.type(window.notDefined) === "undefined")   -------->trueconsole.log(jQuery.type(123) === "number")                    -------->trueconsole.log(jQuery.type('123') === "string")                  -------->trueconsole.log(jQuery.type([]) === "array")                      -------->trueconsole.log(jQuery.type(true) === "boolean")                  -------->trueconsole.log(jQuery.type(function(){}) === "function")         -------->rueconsole.log(jQuery.type(new Date()) === "date")               -------->trueconsole.log(jQuery.type(/\d/) === "regexp")                   -------->trueconsole.log(jQuery.type(new Error()) === "error")         -------->true jq版本高于1.9.3console.log(jQuery.type({name:'Hello'}) === "object")         ------->trueconsole.log(jQuery.type(Symbol()) === "symbol")                ------->true------->其余对象类型一般返回object

六.有局限的判断:严格运算符===

通常===出现在我们的条件判断中,比如判断一个变量是否为空,变量是否为数据等,示例如下

var a = null;
typeof a //object
a === null  //true/*扩展补充*///判断一个非数组变量是否为空
if(typeof a != 'undefined' && a ){}//判断一个数组变量是否为空
if (typeof a != “undefined” && a && a.length > 0) {}

总之:

一般变量用typeof,

已知对象类型用instanceof,

通用方法Object.prototype.toString.call()

jQuery项目万能方法jQuery.type()

欢迎大家批评指正

js判断数据类型常用的6种方法相关推荐

  1. js判断数据类型常用的四种方法

    首先说一下js中的数据类型 基本数据类型:String.Number.Boolean.null.undefined.Symbol 引用数据类型:Object  1.typeof const a1 = ...

  2. JS判断数据类型以及数据过滤空值方法

    JS判断数据类型以及数据过滤空值方法 在我们的项目开发中,经常需要对一个传输中的数据进行滤空处理,过滤 null.undefined.''.[].{}等,还要对字符串进行去除两端的空格操作.为此,我写 ...

  3. JS实现深拷贝常用的几种方法

    JS实现深拷贝常用的几种方法 <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...

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

    目录 基本数据类型有哪些 常见的判断js数据类型的方法有如下几种 一.typeof 二.instance of 三. 使用constructor判断数据类型 四.对象原型链判断方法:Object.pr ...

  5. js 中继承常用的几种方法

    继承 继承: 就是指 一个对象 有权 去访问 另一个对象的成员属性 作用是实现代码的复用 继承的方式:只要能实现一个对象 有权访问另一个对象成员 的 方式 都可以成为是 实现继承的方式 3 .继承是对 ...

  6. js判断对象类型的两种方法

    在js 中 , 有一种判断数据基本类型的方法 typeof , 只能判断5中基本类型:即 "number","string","undefined&q ...

  7. if js 判断成绩等级_javascript://8种方法根据分数判断等级

    编写一个函数,根据输入的分数,返回对应的等级 (注:只需要关注核心逻辑,不需要考虑输入分数是否是数字,默认是数字) 1.若分数大于100分或分数小于0分,返回 2.若分数大于或等于0分,小于60分,返 ...

  8. JS判断字符串长度的几种方法(区分中文和英文)

    目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) String.prototype.gblen = function() { var len = 0; for (var i=0; i< ...

  9. js判断网络链接的四种方法

    1. navigator.onLine         <script type="text/javascript">             var p1 = doc ...

最新文章

  1. 【BZOJ】1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
  2. 充电类型一二次检测过程及充电类型
  3. SPI 简介(备忘)
  4. 用户视角看百度移动:从流量集散地到流量目的地
  5. HTTP常用头部信息
  6. NorFlash与NandFlash
  7. Spring boot实体类中常用基本注解
  8. CCF NOI1047 寻找鞍点
  9. 计算机控制电子点火系控制电路分析,点火示波器的工作原理 用示波器诊断点火系故障方法...
  10. c语言开发 kdj,KDJ——随机指标之王
  11. 浏览器语音附加背景音乐
  12. hcia华为认证学习
  13. 不用网的cmd小游戏来啦
  14. mysql连接两个字段_sql如何将二个字段连接在一起
  15. QTreeWidgetItem设置复选框的禁用状态
  16. 轻松理解 客户端和服务器端的区别
  17. 做门户网站 个人站长的新好出路
  18. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之一环境搭建跑起来模拟器!
  19. 【WT588F】网页上位机操作演示
  20. 【安装篇】- 基于 VMWARE Oracle Linux7.9 安装 Oracle19c RAC 详细配置方案

热门文章

  1. WatchAD内网安全态势感知系统搭建
  2. 华为畅享8E高配版重新安装华为FM收音机APP
  3. JS:PC网站转化为手机自适应网页
  4. php数组分开_PHP 合并数组
  5. python彩票分析_排列五4000万大奖得主透秘诀:技术分析是王道
  6. 字节流和字符流区别于转换
  7. 本周热榜 · 叮咚买菜自动下单
  8. MyBatis resultType和resultMap的区别
  9. 眉骨高者为大贵之相_八大天生富贵命骨相
  10. Bookxnote+坚果云实现双PC同步