js判断数据类型常用的四种方法
首先说一下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判断数据类型常用的四种方法相关推荐
- js判断数据类型常用的6种方法
js判断数据类型常用的方法,不论在开发中开始在面试中,都是经常遇到的问题,尤其是在面试时,当面试官问及js判断数据类型的方法时,回答的越多,说明掌握的广度跟深度越多,感觉自己逼格也越高.废话不多说了, ...
- js判断网络链接的四种方法
1. navigator.onLine <script type="text/javascript"> var p1 = doc ...
- JS判断数据类型以及数据过滤空值方法
JS判断数据类型以及数据过滤空值方法 在我们的项目开发中,经常需要对一个传输中的数据进行滤空处理,过滤 null.undefined.''.[].{}等,还要对字符串进行去除两端的空格操作.为此,我写 ...
- JS实现深拷贝常用的几种方法
JS实现深拷贝常用的几种方法 <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...
- PHP取整数函数常用的四种方法
PHP取整数函数常用的四种方法: 1.直接取整,舍弃小数,保留整数:intval(): 2.四舍五入取整:round(): 3.向上取整,有小数就加1:ceil(): 4.向下取整:floor( ...
- 清除浮动最常用的四种方法
1.为什么要清除浮动 开发过程中,浮动是需要掌握的一个技能,页面布局当中,在无法确定子元素的高度(height)时,我们无法给父级标签一个固定的高度(height),我们想要的是,由子元素的高度去控制 ...
- js判断数据类型常用的方法
目录 基本数据类型有哪些 常见的判断js数据类型的方法有如下几种 一.typeof 二.instance of 三. 使用constructor判断数据类型 四.对象原型链判断方法:Object.pr ...
- 面试题31:JS中判断是数组的四种方法
目录 第一种:Array.isArray 第二种:instanceof 第三种:通过constructor判断 instanceof和constructor的判定也存在一些弊端 第四种:通过Objec ...
- js 中继承常用的几种方法
继承 继承: 就是指 一个对象 有权 去访问 另一个对象的成员属性 作用是实现代码的复用 继承的方式:只要能实现一个对象 有权访问另一个对象成员 的 方式 都可以成为是 实现继承的方式 3 .继承是对 ...
最新文章
- 据说只有程序员才看得懂 | 每日趣闻
- JAVA学习笔记——JAVA基础语法(四)
- cad字体安装_浩辰CAD与AutoCAD兼容性测评大起底!
- 中object转为list集合_java基础集合小结
- 三年0故障是如何做到的?
- 大数据集群启停shell脚本:hadoop(hdfs、yarn)、hbase集群启停
- java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
- dataframe记录数_大数据系列之Spark SQL、DataFrame和RDD数据统计与可视化
- 为Flash Builder/Professional更新Flash Player
- NYOJ-子串和(dp)
- tomcat与java的版本_Tomcat JVM版本与JAVA_HOME不同
- CCF推荐期刊会议(A类)
- MySQL数据库实验
- 将自己开发的vue组件库发布到npm
- 华盛顿道格拉斯县计划建立区块链创新园区
- 背单词App开发日记4
- 在CentOS 7 安装Calamari
- 【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的WebTransport通信
- cmake CMAKE_CXX_COMPILER_VERSION 检查失败
- 18岁以后,大学生长高个子的秘诀是什么?
热门文章
- HTML特殊转义字符
- FreeBSD使用CVSup升级Ports,让它涣然一新
- FME数据处理04:面自相交拓扑检查
- 利用黑客手段一台手机“变”出千万台,新型诈骗技术曝光
- python 的魔方方法__getattribute__ 和__getattr__方法介绍
- ubuntu:防火墙配置详细讲解(全)
- 如何正确使用物业安全巡检系统
- 微机原理——8086中断类型以及中断向量表、中断响应、中断返回
- 以太坊加速区块同步方法
- How To Install GLPI 9.5 On CentOS7