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 相关文章推荐
FileUpload 控件 禁止手动输入或粘贴的实现代码
Apr 07 Javascript
javascript 在firebug调试时用console.log的方法
May 10 Javascript
javascript笛卡尔积算法实现方法
Apr 08 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
微信小程序实现的canvas合成图片功能示例
May 03 Javascript
Vue2.0实现简单分页及跳转效果
Jul 29 Javascript
解决Vue中 父子传值 数据丢失问题
Aug 27 Javascript
vue 子组件和父组件传值的示例
Sep 11 Javascript
解决await在forEach中不起作用的问题
Feb 25 Javascript
Vue 打包后相对路径的引用问题
Jun 05 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
phpwind中的数据库操作类
2007/01/02 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
PDO::quote讲解
2019/01/29 PHP
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
python deque模块简单使用代码实例
2020/03/12 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
实习护士自我鉴定
2013/10/13 职场文书
挂职思想汇报
2013/12/31 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
房产分割协议书范文
2014/11/21 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
余世维讲座观后感
2015/06/11 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
关于幸福的感言
2015/08/03 职场文书
500字作文之周记
2019/12/13 职场文书