js 精确判断对象的类型

js 精确判断对象的类型js 中通过 Object prototype toString 方法 精确判断对象的类型

        在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。

        对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

如何判断 对象、数组、函数等复杂类型?

        要想区别对象、数组、函数,单纯使用 typeof 是不行的,JavaScript中可以通过Object.prototype.toString方法来判断。

如:

var o = {}; o.toString(); // "[object Object]" 

上面代码调用空对象的toString方法,结果返回一个字符串object Object,其中第二个Object表示该值的构造函数。这是一个十分有用的判断数据类型的方法。

但是,数组、字符串、函数、Date对象都分别覆写了自己版本的toString方法,覆盖了Object.prototype.toString方法。

var arr = []; arr.toString(); //'' [1, 2, 3].toString() // "1,2,3" '123'.toString() // "123"

js 精确判断对象的类型

 我们发现实例对象可能会自定义toString方法,覆盖掉Object.prototype.toString方法。通过函数的call方法,可以在任意值上调用Object.prototype.toString方法,帮助我们判断这个值的类型。

Object.prototype.toString.call(value)

例子:

var arr = []; console.log(Object.prototype.toString.call(arr))  // "[object Array]" 

js 精确判断对象的类型

 由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:

console.log(Object.prototype.toString.call(123)) //[object Number] console.log(Object.prototype.toString.call('123')) //[object String] console.log(Object.prototype.toString.call(undefined)) //[object Undefined] console.log(Object.prototype.toString.call(true)) //[object Boolean] console.log(Object.prototype.toString.call({})) //[object Object] console.log(Object.prototype.toString.call([])) //[object Array] console.log(Object.prototype.toString.call(function(){})) //[object Function]

js 精确判断对象的类型

 

扩展:实现判断对象类型的函数

//判断是否为函数 function isFunction(it) {         return Object.prototype.toString.call(it) === '[object Function]';     } //判断是否为数组: function isArray(o) {    return Object.prototype.toString.call(o) === '[object Array]';   }

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

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

(0)
上一篇 2026年3月17日 下午10:22
下一篇 2026年3月17日 下午10:22


相关推荐

  • 【AI】为Cursor配置MCP服务器

    【AI】为Cursor配置MCP服务器

    2026年3月16日
    3
  • idea激活码mac【在线破解激活】「建议收藏」

    idea激活码mac【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    65
  • Tomcat日志切割总结[通俗易懂]

    Tomcat日志切割总结[通俗易懂]目录目录前言1.创建shell脚本进行catalina.out日志文件切割2.使用log4j成功使catalina.out文件实现分割3.用cronolog软件来分割Tomcat的catalina.out文件假设我们想日志以catalina.2018-08-31.out这种方式分割前言我们都知道将一个项目部署到Tomcat之后,Tomcat服…

    2022年6月20日
    49
  • 单选按钮控件和复选框控件_单选按钮控件和复选框控件都具有

    单选按钮控件和复选框控件_单选按钮控件和复选框控件都具有Windows单按钮、复选框、分组框控件单选按钮(Radio Button)和复选框(Check Box)是常见的Windows控件,用于从给出的选项中选择一项或多项,如下图所示:单选钮与复选框单选按钮是互斥的,只能选择其中一项;而复选框没有限制,可以选择一项或多项。单选按钮和复选框都是一种特殊的按钮,窗口类名称都是button,只不过增加了一些特殊的窗口样式罢了。单选按钮的样式为BS_…

    2022年8月18日
    12
  • cursor总结

    cursor总结

    2026年3月16日
    3
  • LFU模拟

    LFU模拟DESC 请你为最不经常使用 LFU 缓存算法设计并实现数据结构 实现 LFUCache 类 LFUCache intcapacity 用数据结构的容量 capacity 初始化对象 intget intkey 如果键存在于缓存中 则获取键的值 否则返回 1 voidput intkey intvalue 如果键已存在 则变更其值 如果键不存在 请插入键值对 当缓存达到其容量时 则应该在插入新项之前 使最不经常使用的项无效 在此问

    2026年3月17日
    2

发表回复

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

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