js中的typeof和instanceof的用法和区别(附类型判断方法)_js类型判断instence of mdn-程序员宅基地

技术标签: 类型判断  判断类型  javascript  typeof  instanceof  

typeof

作用:用于判断一个一个表达式,(对象或者原始值),返回一个字符串。

返回的可能的值(摘自mdn)

类型 结果
Undefined "undefined"
Null "object" (历史遗留问题)
Boolean "boolean"
Number "number"
String "string"
Symbol (ECMAScript 6 新增) "symbol"
宿主对象(由JS环境提供) Implementation-dependent
函数对象 ( [[Call]] 在ECMA-262条款中实现了) "function"
任何其他对象 "object"

instanceof

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

使用规则:

object instanceof constructor

要求前面是个对象,后面是一个构造函数。而且返回的是布尔型的,不是true就是false。

常用使用:

由于typeof只能判断类型,所以,数组和对象返回的都是object,这时就需要使用instanceof来判断是否是

[] instanceof Array //true


所以,我们可以通过这两种方式封装一个函数专门进行类型判断:

    function getDataType(obj) {
        if(obj === null){
            return "null";
        }else if(typeof obj === "object"){
            if(obj instanceof Array){
                return "array";
            }else{
                return "object";
            }
        }else{
            return typeof obj;
        }
    }
以下是对每个类型的测试
    console.log(getDataType(111)); //number
    console.log(getDataType("fasd"));//string
    console.log(getDataType(true));//boolean
    console.log(getDataType(function () { }));//function
    console.log(getDataType([]));//array
    console.log(getDataType({}));//object
    console.log(getDataType(null));//null
    console.log(getDataType(undefined));//undefined
    console.log(getDataType(/\n/));//object
    var a;
    console.log(getDataType(a));//undefined 如果传入没有声明的变量会直接报错

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30100043/article/details/76618490

智能推荐

死锁习题细究_若系统s1采用死锁避免方法,s2采用死锁检测方法-程序员宅基地

文章浏览阅读6.9k次,点赞23次,收藏35次。(2015.26)若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中正确的是:B.I. S1会限制用户申请资源的顺序,而S2不会 II. S1需要进程运行所需要的资源总量信息,而S2不需要 III. S1不会给可能导致死锁的进程分配资源,而S2会A.I、II B.II、III C. I、III D. I、II、III分析:这在书上其实说的很明确了,只是被忽略了。关于死锁的处理主要_若系统s1采用死锁避免方法,s2采用死锁检测方法

最全数学各个分支简介-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏19次。来源:算法数学俱乐部编辑 ∑Gemini数论人类从学会计数开始就一直和自然数打交道了,后来由于实践的需要,数的概念进一步扩充,自然数被叫做正整数,而把它们的相反数叫做负整数,介于正整数和..._数学分支

java配置tomcat连接池的具体操作含义?-程序员宅基地

文章浏览阅读72次。想深入了解下,使用数据源和连接池的具体操作含义。找了很多资料都没有详细的描述,想问下大家一点疑问。如下:方式一:在tomcat的context.xml中添加了如下代码<Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource" username="scott" password="abc..._lookup("java:/oracleds");是什么意思

然后制作次世代建模?资深大咖给你技巧详解_3d建模次世代朋克风格-程序员宅基地

文章浏览阅读98次。蒸汽朋克女猎手制备对于概念艺术,您必须清楚地了解您的主要动机是什么。例如,我想模仿一个女猎人(她是DC Comics的超级英雄),我也想给她一个蒸汽朋克的样子。所以我在不同的网站上搜索了很多艺术品,当我得到一些想法时,我开始将它们放入参考表中,包括鞋子,身体,面部,面具,头发,长手套,绑腿等等。尽量简化你的参考表; 它会帮助你不要在中途迷茫。如果你找不到合适的参考资料,你可以在Photoshop中粗略地绘制它。缩短和最小化您的参考集合设计 - 执行在这一点上,我开始阻挡所有..._3d建模次世代朋克风格

iOS AutoLayout: 从 X�IB 中加载 UIViewController_cusviewcontroller.xib-程序员宅基地

文章浏览阅读1.8k次。在博客 iOS AutoLayout: 关联 Xib 和 UIViewController 讨论了 UIViewController 如何和一个 xib 关联并且展现出来.在那篇博客中, 最后说到使用下面这种方式可以加载 ViewController -(instancetype)initWithNibName:(NSString )nibNameOrNil bundle:(NSBundle_cusviewcontroller.xib

matlab课后实验6答案,matlab课后实验六-程序员宅基地

文章浏览阅读1.1k次。1、实验目的(1)熟悉用双线性变换法设计IIR 数字滤波器的原理与方法。(2)掌握数字滤波器的计算机仿真方法。(3)通过观察对实际心电图信号的滤波作用,获得数字滤波的感性知识。 2、实验原理利用双线性变换设计IIR 滤波器(只介绍巴特沃斯数字低通滤波器的设计),首先要设计出满足指标要求的模拟滤波器的传递函数)(s H a ,然后由)(s H a 通过双线性变换可得所要设计的IIR 滤波器的系统函数..._人体心电图采样信号在测量过程中往往受到工业高频干扰,所以,必须经过低通滤波处理

随便推点

「Do.019」2018这一年,年终总结_019年终总结-程序员宅基地

文章浏览阅读399次。首发公众号:Android程序员日记作者:贤榆的榆如果你觉得有帮助欢迎关注、赞赏、转发阅读时间:6200字 12分钟2018年的总结每次到了年终总结的时候,回首这一年都恍如昨日。随着年龄的增长,虽然感觉时间变得越来越转眼即逝,但在这一年里,似乎也经历的不少,潦草几句流水账写下我还记得与各位分享一下:1月报了某外教网的一年课程练习口语。(但一年的课程截止发文之日也不到五分之..._019年终总结

解决storyboard约束警告_技术成长笔记_新浪博客-程序员宅基地

文章浏览阅读133次。1)之前项目中出现过类似的警告问题,由于懒因为查找什么情况。最近的一个项目又遇到了如此的问题,实在忍受不了于是找解决办法. 问题如下:Unable to simultaneouslysatisfy constraints.Probably at least one of theconstraints in the following list is one you don..._uistoryboard 约束未生效

[Cgroup笔记]基础知识:子系统subsystems、层级hierarchies、任务tasks及它们之间的关系_子系统和层次系统区别-程序员宅基地

文章浏览阅读1k次。文章目录简介子系统subsystems层级 hierarchies任务tasks使用方法实例1实例2简介​​​Cgroup 可​​​让​​​您​​​为​​​系​​​统​​​中​​​所​​​运​​​行​​​任​​​务​​​(进​​​程​​​)的​​​用​​​户​​​定​​​义​​​组​​​群​​​分​​​配​​​资​​​源​​​ – 比​​​如​​​ CPU 时​​​间​​​、​​​系​​​统​​​内​​​存​​​、​​​网​​​络​​​带​​​宽​​​或​​​者​​​这​​​些​​​资​​​源​​​的_子系统和层次系统区别

pycharm如何同时安装Python2和Python3_pycharm同时使用python2和python3-程序员宅基地

文章浏览阅读4.1k次。前言大家都知道Python语言有两个特点,第一是它有Python2和Python3两个版本,第二是它是由很多独立的库堆叠起来了,大部分人学习Python都是从Python2开始的,但是由于Python2从2020年开始很多库就停止维护了,大部分互联网公司Python代码也开始从Python2往Python3迁移了,因此大部分开始同时使用Python2和Python3,Python的IDE比较多,..._pycharm同时使用python2和python3

sql端口1433错误的问题_c:\users\lenovo>telnet localhost 1433 正在连接localhos-程序员宅基地

文章浏览阅读1.4k次。正在连接127.0.0.1...无法打开到主机的连接。 在端口 1433: 连接失败解决方案先防火墙新建规则端口1433结果没用!cmd先输入telnet localhost 1433发现还是正在连接localhost 无法打开到主机的连接。 在端口 1433: 连接失败打开配置管理器,找到 SQL Server(SQ_c:\users\lenovo>telnet localhost 1433 正在连接localhost...无法打开到主机的连

VS2019打开项目,出现“无法找到 .NET Core SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配“的错误_found .net sdk, but did not find dotnet.dll-程序员宅基地

文章浏览阅读9.7k次,点赞3次,收藏7次。今天从GitHub上拉下来一个工程,正想要学习的时候,打开工程结果出现了 “无法找到 .NET Core SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配” 的报错,在经过一系列百度之后,得到最简单解决方案:使用cmd命令 dotnet --info 查看自己使用的SDK版本,然后直接找到项目中的 global.json 文件,右键打开,直接修改版..._found .net sdk, but did not find dotnet.dll

推荐文章

热门文章

相关标签