JavaScript判断数据类型有几种方法及区别介绍


Posted in Javascript onSeptember 02, 2020

有五种数据判断类型方法typeof 、instanceof、constructor、Object.prototype.toString.call()、jquery.type()

一、typeof方法

typeof是个操作符,可以判断基本数据类型(返回的结果只能是number,string,boolean,null,symbol,function,object)
返回值分以下几种
对于基本类型。除了null值返回object以外,其他均返回正确的结果
对于引用值来说,除了function返回function类型,其他都返回object类型
例:

console.log(
 typeof 100, //"number"
 typeof 'abc', //"string"
 typeof false, //"boolean"
 typeof undefined, //"undefined"
 typeof null, //"object"
 typeof [1,2,3], //"object"
 typeof {a:1,b:2,c:3}, //"object"
 typeof function(){console.log('aaa');}, //"function"
 typeof new Date(), //"object"
 typeof /^[a-zA-Z]{5,20}$/, //"object"
 typeof new Error() //"object"
 typeof new Number(100), //'object'
 typeof new String('abc'),// 'string'
 typeof new Boolean(true),//'boolean'
)
 

二、instanceof方法

一般用来检测引用数据类型,表达式为:A instanceof B,判断A是否是B的实例,如果 A 是 B 的实例,则返回 true,否则返回 false,由构造类型判断出数据类型

console.log(
 100 instanceof Number, //false
 'dsfsf' instanceof String, //false
 false instanceof Boolean, //false
 undefined instanceof Object, //false
 null instanceof Object, //false
 [1,2,3] instanceof Array, //true
 {a:1,b:2,c:3} instanceof Object, //true
 function(){console.log('aaa');} instanceof Function, //true
 new Date() instanceof Date, //true
 /^[a-zA-Z]{5,20}$/ instanceof RegExp, //true
 new Error() instanceof Error //true
)
//注意: instanceof 后面一定要是对象类型,大小写不能写错,该方法试用一些条件选择或分支

还需要注意null和undefined都返回了false,这是因为它们的类型就是自己本身,并不是Object创建出来它们,所以返回了false。

三、constructor方法

constructor是prototype对象上的属性,指向构造函数,

var num = 123;
var str = 'abcdef';
var bool = true;
var arr = [1, 2, 3, 4];
var json = {name:'wenzi', age:25};
var func = function(){ console.log('this is function'); }
var und = undefined;
var nul = null;
var date = new Date();
var reg = /^[a-zA-Z]{5,20}$/;
var error= new Error();

function Person(){
 
}
var tom = new Person();

// undefined和null没有constructor属性
console.log(
 tom.constructor==Person,
 num.constructor==Number,
 str.constructor==String,
 bool.constructor==Boolean,
 arr.constructor==Array,
 json.constructor==Object,
 func.constructor==Function,
 date.constructor==Date,
 reg.constructor==RegExp,
 error.constructor==Error
);
//所有结果均为true

注意:除了undefined和null之外,其他类型都可以通过constructor属性来判断类型

方法四:Object.prototype.toString 方法

用来检测对象类型

var toString = Object.prototype.toString;

toString.call(123); //"[object Number]"
toString.call('abcdef'); //"[object String]"
toString.call(true); //"[object Boolean]"
toString.call([1, 2, 3, 4]); //"[object Array]"
toString.call({name:'wenzi', age:25}); //"[object Object]"
toString.call(function(){ console.log('this is function'); }); //"[object Function]"
toString.call(undefined); //"[object Undefined]"
toString.call(null); //"[object Null]"
toString.call(new Date()); //"[object Date]"
toString.call(/^[a-zA-Z]{5,20}$/); //"[object RegExp]"
toString.call(new Error()); //"[object Error]"

toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型更严格的讲,是 toString运行时this指向的对象类型, 返回的类型格式为[object,xxx],xxx是具体的数据类型,其中包括:String,Number,Boolean,Undefined,Null,Function,Date,Array,RegExp,Error,HTMLDocument等等都可以通过这个方法获取到

5、无敌万能的方法:jquery.type()

如果对象是undefined或null,则返回相应的“undefined”或“null”。

jQuery.type( undefined ) === "undefined"
jQuery.type() === "undefined"
jQuery.type( window.notDefined ) === "undefined"
jQuery.type( null ) === "null"

如果对象有一个内部的[[Class]]和一个浏览器的内置对象的 [[Class]] 相同,我们返回相应的 [[Class]] 名字

jQuery.type( true ) === "boolean"
jQuery.type( 3 ) === "number"
jQuery.type( "test" ) === "string"
jQuery.type( function(){} ) === "function"
jQuery.type( [] ) === "array"
jQuery.type( new Date() ) === "date"
jQuery.type( new Error() ) === "error" // as of jQuery 1.9
jQuery.type( /test/ ) === "regexp"

其他一切都将返回它的类型“object”。
6 . 自己也可以封装一个获取变量准确类型的函数

function gettype(obj) {
 var type = typeof obj;

 if (type !== 'object') {
 return type;
 }
 //如果不是object类型的数据,直接用typeof就能判断出来

 //如果是object类型数据,准确判断类型必须使用Object.prototype.toString.call(obj)的方式才能判断
 return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
}

总结

到此这篇关于JavaScript判断数据类型有几种方法及区别介绍的文章就介绍到这了,更多相关js 判断数据类型内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
用javascript动态调整iframe高度的代码
Apr 10 Javascript
javascript来定义类的规范小结
Nov 19 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
html的DOM中document对象anchors集合用法实例
Jan 21 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
js实现简单的可切换选项卡效果
Apr 10 Javascript
JSON与XML优缺点对比分析
Jul 17 Javascript
javascript基本算法汇总
Mar 09 Javascript
laypage分页控件使用实例详解
May 19 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
详解使用nvm管理多版本node的方法
Aug 30 Javascript
vuex的使用步骤
Jan 06 Vue.js
jQuery中getJSON跨域原理的深入讲解
Sep 02 #jQuery
JavaScript交换变量常用4种方法解析
Sep 02 #Javascript
Vue-cli打包后部署到子目录下的路径问题说明
Sep 02 #Javascript
Jquery $.map使用方法实例详解
Sep 01 #jQuery
JQuery基于FormData异步提交数据文件
Sep 01 #jQuery
vue实现路由懒加载的3种方法示例
Sep 01 #Javascript
JQuery使用数组遍历跳出each循环
Sep 01 #jQuery
You might like
如何使用php输出时间格式
2013/08/31 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
TensorFlow神经网络优化策略学习
2018/03/09 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
is_file和file_exists效率比较
2021/03/14 PHP
vivo智能手机官方商城:vivo
2016/09/22 全球购物
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
计算机个人求职信范例
2014/01/24 职场文书
总账会计岗位职责
2014/03/13 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
保险公司演讲稿
2014/09/02 职场文书
小学教育见习报告
2014/10/31 职场文书
单位接收函格式
2015/01/30 职场文书
大学生年度个人总结
2015/02/15 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
python使用pygame创建精灵Sprite
2021/04/06 Python
python入门之算法学习
2021/04/22 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技