typeof
用于判断基本数据类型,判断复杂数据类型时返回值都是 object
console.log(typeof 36) // number
console.log(typeof 'PUJI') // string
console.log(typeof true) // boolean
console.log(typeof undefined) // undefined
console.log(typeof null) // object
console.log(typeof {}) // object
console.log(typeof []) // object
console.log(typeof new Date) // object
console.log(typeof function () {}) // function
constructor
可以判断复杂数据类型,但无法判断 undefined 和 null 类型
let num = 123
console.log(num.constructor) // Number()
console.log('PUJI'.constructor) // String()
console.log(true.constructor) // Boolean()
console.log([].constructor) // Array()
console.log((function () {}).constructor) // Function()
console.log((new Date()).constructor) // Date()
instanceof
无法判断基本数据类型,但可精确判断复杂数据类型
语法结构 “对象 instanceof 构造函数”
console.log( {} instanceof Object ) // true
Object.portotype.toString.call
可以判断所有数据类型
语法结构:“Object.portotype.toString.call(需要检测的数据类型)”
console.log(Object.portotype.toString.call(123)) // [object Number]
console.log(Object.portotype.toString.call('PUJI')) // [object String]
console.log(Object.portotype.toString.call(true)) // [object Boolean]
console.log(Object.portotype.toString.call(undefined)) // [object Undefined]
console.log(Object.portotype.toString.call(new Date())) // [object Date]
console.log(Object.portotype.toString.call(function () {})) // [object Function]
console.log(Object.portotype.toString.call([])) // [object Array]
console.log(Object.portotype.toString.call({})) // [object Object]
参考链接
Bilibili 视频教程
https://www.bilibili.com/video/BV15K4y1M721?p=12