js判断数据类型常用的6种方法
js判断数据类型常用的方法,不论在开发中开始在面试中,都是经常遇到的问题,尤其是在面试时,当面试官问及js判断数据类型的方法时,回答的越多,说明掌握的广度跟深度越多,感觉自己逼格也越高.废话不多说了,进入正题
- 面试常问,基本数据类型有哪些,number,string,boolean,null,undefined,symbol以及未来ES10新增的BigInt(任意精度整数)七类。
- 引用数据类型(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种方法相关推荐
- js判断数据类型常用的四种方法
首先说一下js中的数据类型 基本数据类型:String.Number.Boolean.null.undefined.Symbol 引用数据类型:Object 1.typeof const a1 = ...
- JS判断数据类型以及数据过滤空值方法
JS判断数据类型以及数据过滤空值方法 在我们的项目开发中,经常需要对一个传输中的数据进行滤空处理,过滤 null.undefined.''.[].{}等,还要对字符串进行去除两端的空格操作.为此,我写 ...
- JS实现深拷贝常用的几种方法
JS实现深拷贝常用的几种方法 <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...
- js判断数据类型常用的方法
目录 基本数据类型有哪些 常见的判断js数据类型的方法有如下几种 一.typeof 二.instance of 三. 使用constructor判断数据类型 四.对象原型链判断方法:Object.pr ...
- js 中继承常用的几种方法
继承 继承: 就是指 一个对象 有权 去访问 另一个对象的成员属性 作用是实现代码的复用 继承的方式:只要能实现一个对象 有权访问另一个对象成员 的 方式 都可以成为是 实现继承的方式 3 .继承是对 ...
- js判断对象类型的两种方法
在js 中 , 有一种判断数据基本类型的方法 typeof , 只能判断5中基本类型:即 "number","string","undefined&q ...
- if js 判断成绩等级_javascript://8种方法根据分数判断等级
编写一个函数,根据输入的分数,返回对应的等级 (注:只需要关注核心逻辑,不需要考虑输入分数是否是数字,默认是数字) 1.若分数大于100分或分数小于0分,返回 2.若分数大于或等于0分,小于60分,返 ...
- JS判断字符串长度的几种方法(区分中文和英文)
目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) String.prototype.gblen = function() { var len = 0; for (var i=0; i< ...
- js判断网络链接的四种方法
1. navigator.onLine <script type="text/javascript"> var p1 = doc ...
最新文章
- 【BZOJ】1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
- 充电类型一二次检测过程及充电类型
- SPI 简介(备忘)
- 用户视角看百度移动:从流量集散地到流量目的地
- HTTP常用头部信息
- NorFlash与NandFlash
- Spring boot实体类中常用基本注解
- CCF NOI1047 寻找鞍点
- 计算机控制电子点火系控制电路分析,点火示波器的工作原理 用示波器诊断点火系故障方法...
- c语言开发 kdj,KDJ——随机指标之王
- 浏览器语音附加背景音乐
- hcia华为认证学习
- 不用网的cmd小游戏来啦
- mysql连接两个字段_sql如何将二个字段连接在一起
- QTreeWidgetItem设置复选框的禁用状态
- 轻松理解 客户端和服务器端的区别
- 做门户网站 个人站长的新好出路
- 王姨劝我学HarmonyOS鸿蒙2.0系列教程之一环境搭建跑起来模拟器!
- 【WT588F】网页上位机操作演示
- 【安装篇】- 基于 VMWARE Oracle Linux7.9 安装 Oracle19c RAC 详细配置方案