js 精确判断对象的类型
在 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 精确判断对象的类型相关推荐
- js中判断对象具体类型
大家可能知道js中判断对象类型可以用typeof来判断,看下面的情况. <script>alert(typeof 1);//numberalert(typeof "2" ...
- [js] 如何判断对象是否属于某个类?
[js] 如何判断对象是否属于某个类? obj.proto === class.prototype 可以递归去找obj instanceof class 个人简介 我是歌谣,欢迎和大家一起交流前后端知 ...
- vue 判断json是否为空_vue.js怎么判断对象是否为空?
vue.js怎么判断对象是否为空?下面本篇文章给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. vue.js怎么判断对象是否为空? vue有两个方法可用 方法一:JSO ...
- js中判断对象数据类型的方法
javascript中有六种数据类型:string:boolean:Array:Object:null;undefined.如何检测这些数据类型呢,总结方法如下: 方法一:采用typeof var f ...
- js中判断对象是否为空
1.es6中可以使用Object.keys(obj) var data = {}; var arr = Object.keys(data); alert(arr.length == 0); //tru ...
- JS中判断对象是对象还是数组
JS中判断对象是对象还是数组的方法 JS中判断对象是不是数组的方法 JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function ...
- js判断客户浏览器类型,版本
在JS中判断浏览器的 类型,估计是每个编辑过页面的开发人员都遇到过的问题.在众多的浏览器产品中,IE.Firefox.Opera.Safari........众多品牌 却标准不一,因此时常需要根据不同 ...
- vue 对象判断为空_Vue中可用的判断对象是否为空的方法
vue有两个方法可用 1. JSON.stringify(evtValue)=='{}' 2. Object.keys(xxx).length==0 js判断对象是否为空对象的几种方法 1.将json ...
- js判断对象类型的两种方法
在js 中 , 有一种判断数据基本类型的方法 typeof , 只能判断5中基本类型:即 "number","string","undefined&q ...
最新文章
- gtk linux 升级_需要在Ubuntu上更新GTK(10.04)
- ASP 代码给 ASP 页加密码保护
- Angular模块/服务/MVVM
- 【Python】生成器有啥用?
- GDCM:gdcm::VL 的测试程序
- 牛客题霸 [分糖果问题] C++题解/答案
- mysql语句怎么记_mysql语句记录
- java虚拟机内存监控_java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用...
- 学习Spring Boot:(五)使用 devtools热部署
- 使用NumberFormatter判断TextInput输入内容是否为数字,如果是则格式化数字。
- Typora for Mac(文本编辑器)
- 静态网站生成器将会成为下一个大热门
- 微信扫一扫不能打开APK下载链接的问题
- 关于一斤酒到底有几两的说明
- python 选择文件对话框插件_Python DearPyGui 常用控件一
- 在VFP中如何调用其它程序
- 【综述】对话系统中的口语理解技术
- 电脑维护入门 GHOST 使用方法 图解说明
- GitHub的Java面试项目
- uni-app 启动广告页