一、通过原型链判断
__ proto __
实例的__ proto__属性指向其构造函数的原型对象
const arr = [1,2,3]
console.log(arr.__proto__ === Array.prototype) // true
constructor
实例的constructor属性指向构造函数本身
const arr = [1,2,3]
console.log(arr.constructor === Array) // true
instanceOf
instanceof可以判断Array是否是实例的构造函数(在原型链上即可)
console.log(arr instanceof Array) // true
isPrototypeOf()
判断Array的原型对象是否为在某个对象的原型链上
const arr = [1,2,3]
console.log(Array.prototype.isPrototypeOf(arr) ) // true
二、通过Object原型上的方法判断
Array.isArray()
es6中用于判断数组类型的方法
const arr = [1,2,3]
console.log(Array.isArray(arr))/ true
Object.prototype.toString
Object原型对象上的方法,被所有对象继承,返回'[Object type]'
字符串
const arr = [1,2,3]
const str = '123'
const fn = function(){}
const obj = {}
console.log(Object.prototype.toString.call(arr)) // [object Array]
console.log(Object.prototype.toString.call(str)) // [object String]
console.log(Object.prototype.toString.call(fn)) // [object String]
console.log(Object.prototype.toString.call(obj)) // [object String]