JS判断数据类型的几种方式

JS判断数据类型的几种方式JS 中常见的几种数据类型基本类型 string boolean number 特殊类型 undefined 和 null3 引用类型 Array Date RegExp typeoftypeof 检测基本数据类型时没有问题 但是当其对引用类型进行检测时 会返回 object 这样就无法进行精准的判断 这样也不足为奇 因为所有的对象其原型链最终都指向了 object 比如 typeofnull

JS中常见的几种数据类型

  1. 基本类型:string、boolean、number
  2. 特殊类型:undefined和null
  3. 3、引用类型:Array、Date、RegExp…

typeof

instanceof

用来判断A是否是B的实例,是的话就返回true,不是就返回false。当 A 的 _proto_ 指向 B 的 prototype 时,就认为A就是B的实例。
这种方式也是有问题的,比如他会认为 []也是Object的实例。
分析一下[]、Array、Object 三者之间的关系: 从instanceof 能够判断出 []._proto_ 指向 Array.prototype, 而 Array.prototype.proto 又指向了Object.prototype,Object.prototype._proto_ 指向了null,标志着原型链的结束。
于是得出一个结论,instanceof只能用来检测两个对象是否在一条原型链上,并不能检测出对象的具体类型。


constructor

当一个函数F被创建时,JS引擎会为其添加prototype原型,然后在原型上添加一个constructor属性,并让其指向F的引用。也就是说F.prototype.constructor === F // ---> true
当执行 var f = new F() 这时候F被当做构造函数使用,这时候F原型上的constructor就会被转移到了实例对象f上,f.constructor === F // --> true
在这里插入图片描述
注意;null和undefined是无效的对象,是不存在constructor这个属性的
但是constructor也是存在问题的,比如当我们重写了F的prototype之后,原有的constructor会丢失,此时F的实例对象f的constructor也不会再指向F,这时候的constructor会默认指向Object。
F.prototype = { a: 'test' }; var f = new F(); f.constructor == F;// false,但是f.constructor == Object; // true为什么呢???
因为F.prototype被重新赋值了 {},而{}是new Object()的一个实例对象,因此,new Object()会把其原型上的constructor传递给 {}
因此,为了规范,在重写对象原型时一般都需要重新给constructor赋值,以保证实例对象的类型不被改写。






Object.prototype.toString

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211091.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:13
下一篇 2026年3月18日 下午11:14


相关推荐

  • linux mysql 修改表名_Linux下mysql怎么设置表名?「建议收藏」

    linux mysql 修改表名_Linux下mysql怎么设置表名?「建议收藏」Linux下mysql可以通过“ALTERTABLE旧表名RENAME[TO]新表名;”语句来修改表名;还可以通过配置my.cnf文件,修改“lower_case_table_names”选项的值为“1”来设置表名不区分大小写。Linux下mysql设置表名在MySQL中,可以使用ALTERTABLE语句来实现表名的修改。在MySQL中可以使用ALTERTABLE语句…

    2022年5月31日
    35
  • hash值_hash转换链接

    hash值_hash转换链接任何类都继承publicinthashCode()方法,该方法返回的值是通过将该对象的内部地址转换为一个整数来实现的,hash表的主要作用就是在对对象进行散列的时候作为key输入。我们需要每个对象

    2022年8月4日
    14
  • 音乐标签修改器——Mp3tag

    音乐标签修改器——Mp3tagMp3tag用于编辑音频文件元数据:批量标签编辑、在线数据库查询、根据标签信息重命名文件

    2022年7月25日
    14
  • Excel 8000401a 错误 及解决办法[通俗易懂]

    Excel 8000401a 错误 及解决办法[通俗易懂]“/”应用程序中的服务器错误。——————————————————————————–检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:8000401a。说明:执行当前Web请求期…

    2022年7月25日
    14
  • FEC编码_无线电FEC

    FEC编码_无线电FECFEC编码:ES流:也叫基本码流,包含视频、音频或数据的连续码流.PES流:也叫打包的基本码流,是将基本码流ES流根据需要分成长度不等的数据包,并加上包头就形成了打包的基本码流PES流.TS流:也叫传输流,是由固定长度为188字节的包组成,含有独立时基的一个或多个节目,适用于误码较多的环境.在DVB-S标准中,只规定了1/2、2/3、3/4、5/6、7/8这5种FEC码率,为什么只规定这5…

    2022年8月11日
    6
  • kubectl 命令_numactl命令

    kubectl 命令_numactl命令在清华大学出版社出版的<<Kubernetes零基础快速入门>>一书上看到了总结的Kubectl命令,觉得很不错,比较全,包括有命令的含义以及常见的资源对象,所以分享一下。常

    2022年8月17日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号