首先说一下js中的数据类型

基本数据类型:String、Number、Boolean、null、undefined、Symbol

引用数据类型:Object

 1.typeof

    const a1 = Symbol('a1')console.log(typeof '11');//stringconsole.log(typeof 1);//numberconsole.log(typeof true);//booleanconsole.log(typeof null);//objectconsole.log(typeof undefined);//undefinedconsole.log(typeof a1);//symbolconsole.log(typeof [1,2,3]);//objectconsole.log(typeof {name:'11'}); //object

值得注意的是:null会被typeof检测为object

因为js数据类型在底层都是以二进制的形式表示的,二进制的前三位为0会被typeof判断为对象类型,而null的二进制位恰好都是0

2.instanceof

    const a1 = Symbol('a1')var f = function(params) {}var str = new String('lrn')console.log('11' instanceof String);//false 必须new后才为trueconsole.log(str instanceof String);//truevar num = new Number(1)console.log(1 instanceof Number);//falseconsole.log(num instanceof Number);//truevar boo = new Boolean(true)console.log(true instanceof Boolean);//falseconsole.log(boo instanceof Boolean);//trueconsole.log(a1 instanceof Symbol);//false(Symbol函数不能使用new命令)console.log([1,2,3] instanceof Array);//trueconsole.log(f instanceof Function);//true console.log(null instanceof Null)//Null is not definedconsole.log(undefined instanceof Undefined);//Undefined is not defined

instanceof实现原理:遍历左边变量的原型链,直到找到右边变量的prototype

instanceof只可以判断通过构造函数创建的基本数据类型(不包括null、undefined、symbol)和引用数据类型

3.Object.prototype.toString.call(适用于所有类型)

    const a1 = Symbol('a1')var b = new Set()var c = new Map()console.log(Object.prototype.toString.call('1',1,false));//[object String]console.log(Object.prototype.toString.call(1));//[object Number]console.log(Object.prototype.toString.call(false));//[object Boolean]console.log(Object.prototype.toString.call(null));//[object Null]console.log(Object.prototype.toString.call(undefined));//[object Undefined]console.log(Object.prototype.toString.call(a1));//[object Symbol]console.log(Object.prototype.toString.call(b));//[object Set]console.log(Object.prototype.toString.call(c));//[object Map]

4.constructor

    var f = function(params) {}const a1 = Symbol('a1')console.log(f.constructor);//ƒ Function()console.log([1,2,3].constructor);//ƒ Array()console.log({'name':'李四'}.constructor);//ƒ Object()console.log(true.constructor);//ƒ Boolean()console.log('1'.constructor);//ƒ String()console.log(123.constructor);//报错var num = new Number(12)console.log(num.constructor);//ƒ Number()console.log(a1.constructor);//ƒ Symbol() console.log(null.constructor);//Cannot read properties of nullconsole.log(undefined.constructor);//Cannot read properties of undefined

可见constructor无法判断null、undefined和直接赋值的数字

总结:

基本数据类型(除null)建议用typeof

引用数据类型用instanceof和constructor

Object.prototype.toString.call适用于一切类型

如有错误和建议,欢迎批评指正

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

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

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

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

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

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

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

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

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

  5. PHP取整数函数常用的四种方法

    PHP取整数函数常用的四种方法: 1.直接取整,舍弃小数,保留整数:intval():  2.四舍五入取整:round():  3.向上取整,有小数就加1:ceil():  4.向下取整:floor( ...

  6. 清除浮动最常用的四种方法

    1.为什么要清除浮动 开发过程中,浮动是需要掌握的一个技能,页面布局当中,在无法确定子元素的高度(height)时,我们无法给父级标签一个固定的高度(height),我们想要的是,由子元素的高度去控制 ...

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

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

  8. 面试题31:JS中判断是数组的四种方法

    目录 第一种:Array.isArray 第二种:instanceof 第三种:通过constructor判断 instanceof和constructor的判定也存在一些弊端 第四种:通过Objec ...

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

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

最新文章

  1. 据说只有程序员才看得懂 | 每日趣闻
  2. JAVA学习笔记——JAVA基础语法(四)
  3. cad字体安装_浩辰CAD与AutoCAD兼容性测评大起底!
  4. 中object转为list集合_java基础集合小结
  5. 三年0故障是如何做到的?
  6. 大数据集群启停shell脚本:hadoop(hdfs、yarn)、hbase集群启停
  7. java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. dataframe记录数_大数据系列之Spark SQL、DataFrame和RDD数据统计与可视化
  9. 为Flash Builder/Professional更新Flash Player
  10. NYOJ-子串和(dp)
  11. tomcat与java的版本_Tomcat JVM版本与JAVA_HOME不同
  12. CCF推荐期刊会议(A类)
  13. MySQL数据库实验
  14. 将自己开发的vue组件库发布到npm
  15. 华盛顿道格拉斯县计划建立区块链创新园区
  16. 背单词App开发日记4
  17. 在CentOS 7 安装Calamari
  18. 【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的WebTransport通信
  19. cmake CMAKE_CXX_COMPILER_VERSION 检查失败
  20. 18岁以后,大学生长高个子的秘诀是什么?

热门文章

  1. HTML特殊转义字符
  2. FreeBSD使用CVSup升级Ports,让它涣然一新
  3. FME数据处理04:面自相交拓扑检查
  4. 利用黑客手段一台手机“变”出千万台,新型诈骗技术曝光
  5. python 的魔方方法__getattribute__ 和__getattr__方法介绍
  6. ubuntu:防火墙配置详细讲解(全)
  7. 如何正确使用物业安全巡检系统
  8. 微机原理——8086中断类型以及中断向量表、中断响应、中断返回
  9. 以太坊加速区块同步方法
  10. How To Install GLPI 9.5 On CentOS7