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+mapbar实现地图定位
Apr 09 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
Feb 25 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
Jun 09 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
Aug 18 Javascript
Vue+Vux项目实践完整代码
Nov 30 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
Jan 25 Javascript
Vue自定义指令实现checkbox全选功能的方法
Feb 28 Javascript
javascript使用正则实现去掉字符串前面的所有0
Jul 23 Javascript
详解vue中的computed的this指向问题
Dec 05 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 Javascript
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
星际争霸中的热键
2020/03/04 星际争霸
php生成短域名函数
2015/03/23 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
Python合并多个装饰器小技巧
2015/04/28 Python
Python抓取百度查询结果的方法
2015/07/08 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Django之腾讯云短信的实现
2020/06/12 Python
python开发入门——列表生成式
2020/09/03 Python
.net笔试题
2014/03/03 面试题
应用电子专业学生的自我评价
2013/10/16 职场文书
揠苗助长教学反思
2014/02/04 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
小学语文教研活动总结
2014/07/01 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
写给领导的感谢信
2015/01/22 职场文书
单位病假条范文
2015/08/17 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle