博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
检测数据类型的几种方式
阅读量:6908 次
发布时间:2019-06-27

本文共 1954 字,大约阅读时间需要 6 分钟。

JS中检测数据类型只有四种方式

  • 1、typeof 用来检测数据类型的运算符

  [typeof value]

1)返回值:首先是一个字符串,然后包含了我们常用的数据类型,例如:"number"、"string"、"boolean"、"undefined"、"object"、"function"typeof typeof typeof [12] -> "string"2)typeof null ->"object" 因为null是一个空对象指针3)typeof不能具体的细分对象、数组、正则等,因为不管检测哪一个返回的都是"object"
  • 2、instanceof / constructor
    • 1)instanceof:检测当前实例是否属于某一个类,属于的话返回true,不属于返回false
var ary=[];ary instanceof Array ->trueary instanceof RegExp ->falseary instanceof Object ->true 所有的对象都是Object这个基类的一个实例
    • 2)constructor
ary.constructor===Array ->true 说明ary是Array这个类的一个实例(constructor可以让用户自己来修改,所有我们一般不用这个来检测)
    • 3)instanceof的局限性:只要在这个实例的原型链上的类,用instanceof检测的时候都为true

在类的继承中,我们只是单纯通过instanceof来检测数据类型的话是不准确的

[案例]

function Fn() {
this.x=100;}Fn.prototype = new Array;var f = new Fn;//f只是继承了数组中常用的方法,但是不是数组,例如:在梨树上嫁接苹果树,苹果树只是继承使用了梨树的水分和营养,但是长出来的果实还是苹果而不是梨//console.log(f instanceof Fn);//->true//console.log(f instanceof Array);//->true//console.log(f instanceof Object);//->truevar oDiv=document.getElementById("div1");//oDiv->HTMLDivElement->HTMLElement->Element->Node->EventTarget->Objectconsole.log(oDiv instanceof EventTarget);//->true
  • 3、toString检测数据类型(常用而且相对来说精准的检测方式,上述方式出现的缺陷在这里都弥补了)
    • 1)原理:在Object.prototype上有一个toString方法,这个方法执行的时候,会返回方法中this关键字对应数据值的数据类型,例如:
//Object.prototype.toString() ->返回的是 Object.prototype 的数据类型 ->"[object Object]"//f.toString() ->返回的是f的数据类型 ->"[object Object]"
    • 2)这样的话,我们就可以让Object.prototype.toString执行,并且通过call/apply来改变里面的this关键字,也就是想检测谁的数据类型,我们就可以让this变为谁
Object.prototype.toString.call(12) ->检测12的数据类型 ->"[object Number]"Object.prototype.toString.call("zhufeng") ->"[object String]"Object.prototype.toString.call(null) ->"[object Null]"Object.prototype.toString.call(undefined) ->"[object Undefined]"Object.prototype.toString.call([]) ->"[object Array]"Object.prototype.toString.call(/^$/) ->"[object RegExp]"Object.prototype.toString.call(function(){}) ->"[object Function]"
    • 3)检测的返回值 -> "[object 当前数据类型所属的内置类]"

 

转载于:https://www.cnblogs.com/Scar007/p/7722881.html

你可能感兴趣的文章
C++Vector使用方法
查看>>
MySQL 通配符学习小结
查看>>
CSS之清除浮动
查看>>
window server 2012 r2服务器配置资料参考
查看>>
java中String的常用方法
查看>>
Bootstrap3实现的响应式幻灯滑动效果个人作品集/博客网站模板
查看>>
C#放缩、截取、合并图片并生成高质量新图的类
查看>>
让所有的浏览器都支持html5
查看>>
朴素贝叶斯分类器的应用
查看>>
openstack笔记
查看>>
How to Kill All Processes That Have Open Connection in a SQL Server Database[关闭数据库链接 最佳方法] -摘自网络...
查看>>
HDU1003 Max Sum(求最大字段和)
查看>>
cocos2dx A*算法
查看>>
Trapping Messages Sent to an Application
查看>>
【JQuery插件】元素根据滚动条位置自定义吸顶效果
查看>>
编程之路
查看>>
Myeclipse7.5 下载 安装 注冊 注冊码 100%成功
查看>>
Java拾遗(一):浅析Java子类和父类的实例化顺序 及 陷阱
查看>>
Windows网络编程
查看>>
混沌分形之朱利亚集(JuliaSet)
查看>>