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 相关文章推荐
用js实现的模拟jquery的animate自定义动画(2.5K)
Jul 20 Javascript
用JQuery在网页中实现分隔条功能的代码
Aug 09 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
Javascript 遍历页面text控件详解
Jan 06 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
requirejs + vue 项目搭建详解
Jun 16 Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 Javascript
Node.js创建Web、TCP服务器
Dec 05 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
Node.js安装详细步骤教程(Windows版)详解
Sep 01 Javascript
vue选项卡切换登录方式小案例
Sep 27 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
hammer.js实现图片手势放大效果
2017/08/29 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
vue实现扫码功能
2020/01/17 Javascript
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
浅析Python中的for 循环
2016/06/09 Python
python实现下载文件的三种方法
2017/02/09 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
python中requests小技巧
2017/05/10 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
高中美术教学反思
2014/01/19 职场文书
全国道德模范事迹
2014/02/01 职场文书
公司应聘求职信
2014/06/21 职场文书
Java实现二分搜索树的示例代码
2022/03/17 Java/Android