判断数组
let arr = []
Array.isArray(arr)
// true
arr.constructor === Array
// true
Object.prototype.toString.call(arr)
// "[object Array]"
typeof 判断对象或者数组或者null都为"object"
判断对象
let obj = {}
Object.prototype.toString.call(obj)
// "[object Object]"
obj.constructor === Object
// true
instanceof 判断对象和数组都为true
判断函数
function fn(){
console.log('hello world')
}
Object.prototype.toString.call(fn)
// "[object Function]"
不同数据类型的Object.prototype.toString
方法返回值如下。
数值:返回[object Number]。
字符串:返回[object String]。
布尔值:返回[object Boolean]。
undefined:返回[object Undefined]。
null:返回[object Null]。
数组:返回[object Array]。
arguments 对象:返回[object Arguments]。
函数:返回[object Function]。
Error 对象:返回[object Error]。
Date 对象:返回[object Date]。
RegExp 对象:返回[object RegExp]。
其他对象:返回[object Object]。
扩展数据类型判断函数
function myTypeOf(v){
var str = Object.prototype.toString.call(v);
var reg = /\[object (.*?)\]/;
return str.match(reg)[1].toLowerCase();
}
myTypeOf({});
// "object"
myTypeOf([]);
// "array"
myTypeOf(myTypeOf);
// "function"
myTypeOf(null);
// "null"
myTypeOf('abc');
// "string"
myTypeOf(/reg/);
// "regexp"
myTypeOf();
// "undefined"