typeof 操作符是用来检测基本数据类型的(即值类型),它只会返回以下七个值:
- undefined
- boolean
- string
- number
- object
- function
- symbol
let a
console.log(typeof a) // undefined
console.log(typeof true) // boolean
console.log(typeof 'str') // string
console.log(typeof 2) // number
console.log(typeof {}) // object
const sym = Symbol()
console.log(typeof sym) // symbol
// 两个特例
console.log(typeof null) // object
function name(params) {}
console.log(typeof name) // function
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上(即引用类型)
console.log(2 instanceof Number); // false
console.log(true instanceof Boolean); // false
console.log('str' instanceof String); // false
console.log([] instanceof Array); // true
console.log(function(){} instanceof Function); // true
console.log({} instanceof Object); // true
上述代码可以看出,instanceof 不能正确检测出基本数据类型。当然,将这些基本数据类型包装成引用类型,就可以被 instanceof 检测出来
const num = new Number(2)
console.log(num instanceof Number)
const str = new String(2)
console.log(str instanceof String)
const bol = new Boolean(2)
console.log(bol instanceof Boolean)
获取数据类型还是建议使用 Object.prototype.toString.call() 方法~