我们先来了解一下JS中数据类型有哪些

基本数据类型(值类型):String、Number、boolean、null、undefined、symbol(es6新增的)

引用数据类型 (引用类型):object。包含 Function、Array、Date、RegExp、Error等都是属于 Object 类型 。

一、typeof

  • 通常用来判断基本数据类型,它返回表示数据类型的字符串(返回结果只能包括number,boolean,string,function,undefined,object); *注意,使用typeof来判断null和引用类型 返回的结果都是 'object'
  • 可以使用typeof判断变量是否存在(如if(typeof a!="undefined"){...});
typeof 1           //number
typeof 'a'         //string
typeof true        //boolean
typeof undefined   //undefinedtypeof null        //objecttypeof {}          //object
typeof [1,2,3]     //objectfunction Fn(){}
typeof new Fn()    //objecttypeof new Array() //object

二、instanceof

  • 使用instanceof,如:a instanceof A 根据instanceof的定义:判断参照对象(大写字母A)的prototype属性所指向的对象是否在被行测对象a的原型链上,instanceof 只能用来判断两个对象是否属于实例关系,而不能判断一个对象实例具体属于哪种类型,例如:
function A(name,age){this.name = name;this.age = age;
}a = new A('张三',18);
console.log(a instanceof A)  //trueobj = new Object()//创建一个空对象obj
//或者通过字面量来创建:
obj = {}
console.log(obj instanceof Object); // truearr = new Array()  //创建一个空数组arr  或arr = []
console.log(arr instanceof Array ); // truedate = new Date()
console.log(date instanceof Date ); // true// 注意:instanceof后面一定要是对象类型,instanceof前面相当于它的实例对象,
// 后面的对象类型大小写不能写错,该方法试用一些条件选择或分支

但是这种方式判断有个弊端:对于number,string,boolean这三种基本数据类型,

只有通过构造函数定义比如:let num =new Number(1);这样定义才能检测出。

let num = 1; 这样定义是检测不出来的

简单实现instanceof:

function my_instanceof(L, R) {const O = R.prototype;if (L === null) {return false;}L = L.__proto__;while (true) {if (L === null) {return false;}if (L === O) {return true;}L = L.__proto__;}
}

三、根据constructor判断

  • 针对于instanceof的弊端,我们使用constructor检测,constructor是原型对象的属性指向构造函数。
console.log('数据类型判断 -  constructor');let num = 23;
let date = new Date();
let str = "biu~";
let reg = new RegExp();
let bool = true;
let fn = function () {console.log(886);
};
let udf = undefined;
let nul = null;
let array = [1, 2, 3];
console.log(num.constructor); // [Function: Number]
console.log(date.constructor); // [Function: Date]
console.log(str.constructor); // [Function: String]
console.log(bool.constructor); // [Function: Boolean]
console.log(fn.constructor); // [Function: Function]
console.log(reg.constructor); // [Function: RegExp]
console.log(array.constructor); // [Function: Array]
  • 这种方式解决了instanceof的弊端,可以检测出除了undefined和null的9种类型(因为它两没有原生构造函数)
console.log(udf.constructor);//Cannot read property "constructor" of undefined
console.log(nul.constructor);//Cannot read property "constructor" of null

四、通过Object下的toString.call()方法来判断

  • 在《你不知道的javaScript》(中卷)中讲到:所有typeof返回值为"object"的对象,都包含一个内部属性[[Class]],我们可以把他看作一个内部的分类,而非传统意义上面向对象的类,这个属性无法直接访问,一般通过Object.prototype.toString(…)来查看。并且对于基本数据类类型null,undefined这样没有原生构造函数,内部的[[Class]]属性值仍然是NullUndefined
Object.prototype.toString.call();
console.log(toString.call(123));          //[object Number]
console.log(toString.call('123'));        //[object String]
console.log(toString.call(undefined));    //[object Undefined]
console.log(toString.call(true));         //[object Boolean]
console.log(toString.call({}));           //[object Object]
console.log(toString.call([]));           //[object Array]
console.log(toString.call(function(){})); //[object Function]

五、jq中判断数据类型的方法

jQuery提供了一系列工具方法,用来判断数据类型,以弥补JavaScript原生的typeof运算符的不足。以下方法对参数进行判断,返回一个布尔值。
jQuery.isArray();是否为数组
jQuery.isEmptyObject();是否为空对象 (不含可枚举属性)。
jQuery.isFunction():是否为函数
jQuery.isNumberic():是否为数字
jQuery.isPlainObject():是否为使用“{}”或“new Object”生成对象,而不是浏览器原生提供的对象。
jQuery.isWindow(): 是否为window对象;
jQuery.isXMLDoc(): 判断一个DOM节点是否处于XML文档中。

JS判断数据类型的5种方法相关推荐

  1. js 判断数据类型的几种方法

    粗体判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法 ...

  2. js 判断数据类型的四种方法

    1,typeof typeof 返回的数据类型有 undefined boolean (true,false) string symbol number function object 注意  typ ...

  3. 判断数据类型的5种方法

    1. typeof 可以判断数据类型,它返回表示数据类型的字符串(返回结果只能包括number,boolean,string,function,object,undefined): 可以使用typeo ...

  4. html数据类型判断,JS中判断数据类型的几种方法

    1⃣️首先我们来了解一下js中的数据类型 1.基本数据类型:Undefined.Null.Boolean.Number.String(值类型) 2.复杂数据类型:Object(引用类型) (值类型和引 ...

  5. javascript 判断数据类型的几种方法 1

    1.typeof 类型判断 缺点:无法区分null .对象.数组,Map,Set,WeakMap,WeakSet.RegExp等 注意:通过构造函数创建的变量typeof 后是都是object var ...

  6. JavaScript判断数据类型有几种方法,以及它们的区别

    JavaScript有五种数据判断类型方法: typeof instanceof constructor Object.prototype.toString.call()

  7. js判断数据类型是哪种

    var   gettype=Object.prototype.toString gettype.call('aaaa')        输出      [object String] gettype. ...

  8. JS-循环清空对象 判断数据类型的5种常用方法

    应用场景:一个页面具有大量数据录入功能,在数据录入保存成功之后,需要刷新页面,即清空所有的数据.因为我把所有的字段定义到一个对象中,所以要清空这个对象,如果字段少,可以直接赋值清空,但是数据多的时候, ...

  9. js判断数据类型常用的6种方法

    js判断数据类型常用的方法,不论在开发中开始在面试中,都是经常遇到的问题,尤其是在面试时,当面试官问及js判断数据类型的方法时,回答的越多,说明掌握的广度跟深度越多,感觉自己逼格也越高.废话不多说了, ...

最新文章

  1. 浅谈ARP病毒的清除与预防
  2. c语言中volatile关键字
  3. (转) 共享个很棒的vim配置
  4. 熊志男:写给一名测试工程师
  5. mysql数据库安全配置文件_MySQL数据库安全配置
  6. python实现轨迹回放供应_运动轨迹回放 百度地图api示例源码
  7. 线程同步(互斥锁、条件、读写锁、信号量)
  8. springboot监听器_Spring Boot中文参考指南(2.1.6)23.5、应用程序事件和监听器
  9. C语言字符型常量和字符串常量的区别
  10. Python入门--集合生成式
  11. 阿里云服务器ECS和腾讯云服务器如何安装宝塔面板?
  12. 【车间调度】基于matlab粒子群算法求解6X6车间调度问题【含Matlab源码 411期】
  13. Socket Tools的使用
  14. 伺服电机算功率基本公式_伺服电机选型通用计算公式
  15. vim globle
  16. 一文读懂大比例尺地形图测绘
  17. [数据可视化] 南丁格尔玫瑰图
  18. 资源屋分享两款导航网站源码 支持自动收录、自动审核、自动检测友链功能
  19. flutter小说阅读页之爬坑记录-半角转全角字符
  20. 4.2.7. Aggregate Expressions

热门文章

  1. 将搭建在树莓派上的leanote用frp映射到自己的域名
  2. 摘抄:JavaScript真经部分
  3. PLSQL 导入导出 数据为excel
  4. 质量管理老大难,企业如何迅速提高品质保障能力?
  5. Nginx——动静分离
  6. Java 多线程和并发编程:(二)线程同步 Lock 锁
  7. Vue 中 title 的动态修改
  8. 一文带你搞懂HTTP和RPC协议的异同
  9. 1、CentOS 安装 Java JDK
  10. 纯css阴阳旋转js特效代码