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

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

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

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

Object.prototype.toString()
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"

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

Object.prototype.toString.call(value)

例子:

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

由于 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]

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

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

js 精确判断对象的类型相关推荐

  1. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断,看下面的情况. <script>alert(typeof 1);//numberalert(typeof "2" ...

  2. [js] 如何判断对象是否属于某个类?

    [js] 如何判断对象是否属于某个类? obj.proto === class.prototype 可以递归去找obj instanceof class 个人简介 我是歌谣,欢迎和大家一起交流前后端知 ...

  3. vue 判断json是否为空_vue.js怎么判断对象是否为空?

    vue.js怎么判断对象是否为空?下面本篇文章给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. vue.js怎么判断对象是否为空? vue有两个方法可用 方法一:JSO ...

  4. js中判断对象数据类型的方法

    javascript中有六种数据类型:string:boolean:Array:Object:null;undefined.如何检测这些数据类型呢,总结方法如下: 方法一:采用typeof var f ...

  5. js中判断对象是否为空

    1.es6中可以使用Object.keys(obj) var data = {}; var arr = Object.keys(data); alert(arr.length == 0); //tru ...

  6. JS中判断对象是对象还是数组

    JS中判断对象是对象还是数组的方法 JS中判断对象是不是数组的方法 JavaScript中检测对象的方法  1.typeof操作符  这种方法对于一些常用的类型来说那算是毫无压力,比如Function ...

  7. js判断客户浏览器类型,版本

    在JS中判断浏览器的 类型,估计是每个编辑过页面的开发人员都遇到过的问题.在众多的浏览器产品中,IE.Firefox.Opera.Safari........众多品牌 却标准不一,因此时常需要根据不同 ...

  8. vue 对象判断为空_Vue中可用的判断对象是否为空的方法

    vue有两个方法可用 1. JSON.stringify(evtValue)=='{}' 2. Object.keys(xxx).length==0 js判断对象是否为空对象的几种方法 1.将json ...

  9. js判断对象类型的两种方法

    在js 中 , 有一种判断数据基本类型的方法 typeof , 只能判断5中基本类型:即 "number","string","undefined&q ...

最新文章

  1. gtk linux 升级_需要在Ubuntu上更新GTK(10.04)
  2. ASP 代码给 ASP 页加密码保护
  3. Angular模块/服务/MVVM
  4. 【Python】生成器有啥用?
  5. GDCM:gdcm::VL 的测试程序
  6. 牛客题霸 [分糖果问题] C++题解/答案
  7. mysql语句怎么记_mysql语句记录
  8. java虚拟机内存监控_java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用...
  9. 学习Spring Boot:(五)使用 devtools热部署
  10. 使用NumberFormatter判断TextInput输入内容是否为数字,如果是则格式化数字。
  11. Typora for Mac(文本编辑器)
  12. 静态网站生成器将会成为下一个大热门
  13. 微信扫一扫不能打开APK下载链接的问题
  14. 关于一斤酒到底有几两的说明
  15. python 选择文件对话框插件_Python DearPyGui 常用控件一
  16. 在VFP中如何调用其它程序
  17. 【综述】对话系统中的口语理解技术
  18. 电脑维护入门 GHOST 使用方法 图解说明
  19. GitHub的Java面试项目
  20. uni-app 启动广告页

热门文章

  1. 深度学习实战-图像风格迁移
  2. 哆啦A梦主题乐园,一定要去!
  3. 雷电助手连接不到服务器,雷电模拟器无法联网怎么办 雷电模拟器网络异常的解决办法...
  4. canvas实现漂亮的下雨效果
  5. kaggle论文阅读
  6. Java:使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开
  7. C#使用CLE调用python
  8. Angular属性绑定的功能探索
  9. Angular2+ 双向数据绑定
  10. 【程序人生】这是 2017 关于程序员薪酬最详尽的调查报告