typeof
这种方法存在缺陷,在js中数组[], 也视为对象{},所以无法区分数组与对象
let obj = {}
let arr = []
let str = ''
console.log(typeof obj) // object
console.log(typeof arr) // object
console.log(typeof str) // string
toString()
对于任何对象,obj.proto 指向该对象的原型对象(即构造函数的 prototype 属性所指向的对象)
let obj = {}
let arr = []
let str = ''
console.log(obj.__proto__.toString()) // [object Object]
console.log(arr.__proto__.toString()) // ''
console.log(str.__proto__.toString()) // ''
constructor
在JavaScript中,constructor 属性是一个预定义在大多数对象的原型(prototype)上的属性,它指向创建该对象实例的构造函数
let obj = {}
let arr = []
let str = ''
console.log(obj.constructor) // ƒ Object() { [native code] }
console.log(arr.constructor) // ƒ Array() { [native code] }
console.log(str.constructor) // ƒ String() { [native code] }