target instanceof type
注意:不可以用typeof,因为除了原始类型和function以外,全都是object。(包括null) ; 不要用Object来测试,因为Array属于object的子类
var a = {}
var b = []
// 【注意】不要用Object来测试,因为Array属于Object的子类
console.log(a instanceof Array) //false
console.log(b instanceof Array) //true
target.constructor
由于每个实例会继承原型的属性,而原型的constructor属性会指向自己的构造函数 ;可以显示出自定义的类
var a = {}
var b = []
console.log(a.constructor) // [Function: Object]
console.log(b.constructor) //[Function: Array]
Object.prototype.toString.call(target)
1、每个object会自带一个默认的toString的函数,用来打印该对象的类型
2、但是也可能有的自定义对象会重写toString,因此,从原本的object原型调用,再通过call调用更换this环境
3、无法显示自定义的类,都会显示Object
var a = {}
var b = []
console.log(Object.prototype.toString.call(a)) // [object Object]
console.log(Object.prototype.toString.call(b)) // [object Array]