是否为对象的判断
Object.prototype.toString.call()方法可以精准判断变量类型
// 如果为对象返回 [object Object] | 数组 [object Array] | 字符串 [object String] 等
let obj = {a:1}
Object.prototype.toString.call(obj) === '[object Object]' // true
Object.prototype.isPrototypeOf // 判断是否为对象
// 直接返回 true/false
let obj = {a:1}
Object.prototype.isPrototypeOf(obj) // true
instanceof 判断构造函数: 检查整个原型链
// 需要判断去掉数组类型 数组和对象都会返回 true
let obj = {a:1}
let arr = [1]
console.log(arr instanceof Object); //true
console.log(obj instanceof Object); //true
console.log(arr instanceof Array); //true
console.log(obj instanceof Array); //false
!(obj instanceof Array) && (obj instanceof Object) // true
!(arr instanceof Array) && (arr instanceof Object) // false
typeof变量的类型
// 注意null 数组 对象 返回的都是object
console.log(typeof undefined) // 'undefined'
console.log(typeof null) // 'object'
console.log(typeof true) // 'boolean'
console.log(typeof 1) // 'number'
console.log(typeof '') // 'string'
console.log(typeof function () {}) // 'function'
console.log(typeof {}) // 'object'
console.log(typeof []) // 'object'
let obj = {a:1}
!!obj && !(obj instanceof Array) && typeof obj === 'object' // true