工作中使用typeof
、instanceof
操作符往往无法得到数据的准确类型,本文将结合一些知识点,写一个工具方法,来解决这个痛点。
相关知识点:
- JavaScript 原生提供
Object
对象,所有其他对象都继承自Object
对象,即那些对象都是Object
对象的实例。 -
Object
对象本身是一个构造函数,也可以当作工具方法使用,将任意值转为对象。例如:// 基本类型数据将返回包装对象 var str = 'hello world'; str === Object( str ) // false Object( str ) instanceof String //true var num = 123 ; num === Object( num ) // false Object(num) instanceof Number // true //复杂类型(对象、引用类型)将直接返回 var obj = { name:"mirror" } obj === Object( obj ) // true var arr = [ 'a' , 'b' , 'c' ] arr === Object( arr ) // true
-
Object.prototype.toString()
返回当前对象对应的字符串形式。例如:var obj = new Object(); obj.toString() // "[object object]"
-
Object
的实例对象可以自定义toString
方法,覆盖掉Object.prototype.toString
方法。例如:var arr = [ 'a' , 'b' ]; arr.toString() // 'a,b'
-
使用
call
方法,可以在任意值上调用这个方法,帮助我们判断这个值的类型。例如:Object.prototype.toString.call(2) // "[object Number]" Object.prototype.toString.call('hello world' ) // "[object String]" Object.prototype.toString.call( true ) // "[object Boolean]"
方法封装
function type (data){
if(arguments.length === 0) return new Error('type方法未传参');
var typeStr = Object.prototype.toString.call(data);
return typeStr.match(/\[object (.*?)\]/)[1].toLowerCase();
}
type( {} ) //"object"
type( new Date() ) //"date"
type( [] ) //"array"
详细讲解请参考阮一峰博客
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。