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中创建对象的三种常用方法
Dec 30 Javascript
使用Java实现简单的server/client回显功能的方法介绍
May 03 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
Mar 18 Javascript
Jquery基础教程之DOM操作
Aug 19 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
Jun 25 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
Sep 08 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
Jun 12 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
Dec 29 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
vue路由教程之静态路由
Sep 03 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
中篇:安装及配置PHP
2006/12/13 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
PDO::quote讲解
2019/01/29 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
Python中的装饰器用法详解
2015/01/14 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
解决python删除文件的权限错误问题
2018/04/24 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
Tensorflow累加的实现案例
2020/02/05 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
中专生毕业自我鉴定
2013/11/01 职场文书
外企求职信范文分享
2013/12/31 职场文书
2014自主招生自荐信策略
2014/01/27 职场文书
说明书范文
2014/05/07 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书