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 qq右下角滑出窗口 sheyMsg
Mar 21 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
Jan 17 Javascript
JavaScript原生对象之String对象的属性和方法详解
Mar 13 Javascript
Javascript removeChild()删除节点及删除子节点的方法
Dec 27 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
jquery插件uploadify多图上传功能实现代码
Aug 12 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 Javascript
angularjs http与后台交互的实现示例
Dec 21 Javascript
Vuex的actions属性的具体使用
Apr 14 Javascript
JavaScript动态检测密码强度原理及实现方法详解
Jun 11 Javascript
vue基于v-charts封装双向条形图的实现代码
Dec 09 Javascript
JS 5种遍历对象的方式
Jun 16 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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
php微信公众号开发之简答题
2018/10/20 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
javascript异步编程的六种方式总结
2019/05/17 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
Python实现对象转换为xml的方法示例
2017/06/08 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
Python帮你识破双11的套路
2019/11/11 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
分家协议书范本
2016/03/22 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL