本篇文章讲述了JavaScript中对数据类型检测的方法,大家对JavaScript中对数据类型检测的方法不了解的话或者对JavaScript中对数据类型检测的方法感兴趣的话那么我们就一起来看看本篇文章吧, 好了废话少说进入正题吧!
在这之前,先说说js的类型,js有5大基本类型和一个复杂类型
5大基本类型:undefined,null,number,string,bollean
一个复杂类型:object
1.typeof
返回值类型:字符串
检测如下:
/*5大基本类型*/ var a = 123; console.log(typeof a == "number"); //true var a = '123'; console.log(typeof a == "string"); //true var a = true; console.log(typeof a == "boolean"); //true var a = undefined; console.log(typeof a == "undefined"); //true var a = null; console.log(a == null); //true /*复杂类型*/ var a = function(){}; console.log(typeof a == "function"); //true
对于其他引用类型的对象,typeof不能检测区分,都会返回Object,如日期类型,正则表达式类型等,因此我们不能区分到底检测的是什么(用下文其他方法检测)
typeof 方法函数封装
function typeOf(obj){ return (obj === 'null') ? 'null' : (typeof obj) }
在这最后,补充一个特殊的NaN
console.log(typeof NaN === "number"); //true
2.instanceof
instanceof 运算符可以用来检测一个对象是不是另一个对象的实例
语法:object1 instanceof object2
参数:object1-一个对象,constructor-另一个对象
返回值类型: 布尔值Boolean
怎样理解上面抽象的话呢?
也就是说,通过实例对象的原型链可以访问构造函数对象的原型对象上,这也就是instanceof的工作原理,这也说明了,instanceof并不关心对象的本身结构,只是关心对象与构造函数的关系。
var a = new Date(); console.log(a instanceof Date); //true console.log(a instanceof Object); //true var a = new RegExp('123'); console.log(a instanceof RegExp); //true console.log(a instanceof Object); //true var a = function(){}; console.log(a instanceof Function); //true console.log(a instanceof Object); //true var a = []; console.log(a instanceof Array); //true console.log(a instanceof Object); //true var a = {}; console.log(a instanceof Object); //true
这里我列出了比较常用的实例,如果大家真的对instanceof比较关心的话,点击这里MDN文档
3.constructor属性
constructor 属性返回对创建此对象的构造函数的引用。
返回值类型: 对象Object
这里说明一点的是,我们平时创建的,如: var a = 1, var b = ‘123’…,其实都是引用他们相对应的构造函数从而创建出来他们对于的类型,而不是表面我们看到的直接创建。
各个类型检验方法如下:
/*5大基本类型*/ var a = 123; console.log(a.constructor == Number); //true var a = '123'; console.log(a.constructor == String); //true var a = true; console.log(a.constructor == Boolean); //true var a = undefined; console.log(a && a.constructor); //undefined var a = null; console.log(a && a.constructor); //null /*复杂类型*/ var a = function(){}; console.log(a.constructor == Function); //true var a = new Date(); console.log(a.constructor == Date); //true var a = new Object(); console.log(a.constructor == Object); //true var a = {}; console.log(a.constructor == Object); //true var a = new Array(); console.log(a.constructor == Array); //true var a = []; console.log(a.constructor == Array); //true var a = new RegExp('abc'); console.log(a.constructor == RegExp); //true var a = /^abc$/; console.log(a.constructor == RegExp); //true
4.toString()方法
这个方法检测对象类型最安全,最准确的方法。
返回值类型:字符串String
/*toString 检测类型函数*/ function toStringType(obj){ return Object.prototype.toString.call(obj).slice(8, -1); } /*5大基本类型*/ var a = 123; console.log(toStringType(a)); //"Number" var a = '123'; console.log(toStringType(a)); //"String" var a = true; console.log(toStringType(a)); //"Boolean" var a = undefined; console.log(toStringType(a)); //"Undefined" var a = null; console.log(toStringType(a)); //"Null" /*复杂类型*/ var a = function(){}; console.log(toStringType(a)); //"Function" var a = new Date(); console.log(toStringType(a)); //"Date" var a = new Object(); console.log(toStringType(a)); //"Object" var a = {}; console.log(toStringType(a)); //"Object" var a = new Array(); console.log(toStringType(a)); //"Array" var a = []; console.log(toStringType(a)); //"Array" var a = new RegExp('abc'); console.log(toStringType(a)); //"RegExp" var a = /^abc$/; console.log(toStringType(a)); //"RegExp"
如果你觉得返回的字符串大小写比较麻烦的话,你可以全部转化成小写
代码如下:
function toStringType(obj){ return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); }
到现这个地方,大家可能有疑惑。
var a = 123; console.log(a.toString()); //"123"
1.为什么这样写,返回的是“123”?
答:因为js中每个对象都预定义有自己的toString方法,类似于重写了toString
2.文章中为什么要用call方法?作用是什么?
答:call作用是改变作用域为当前作用域,以文章为例,即将Object的作用域执行环境变为a的,
3.slice的作用?
var a = 123; console.log(Object.prototype.toString.call(a)); //"[Object Number]"
通过这个例子,相比你即明白了吧,是为了结果的直观性。
以上就是本篇文章的所有内容,大家要是还不太了解的话,可以自己多实现两边就很容易掌握了哦!
相关推荐:
以上是JavaScript中对数据类型检测的方法总结的详细内容。更多信息请关注PHP中文网其他相关文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版
视觉化网页开发工具

记事本++7.3.1
好用且免费的代码编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器