typeof 和 instanceof 的区别

244 阅读1分钟

typeof 操作符是用来检测基本数据类型的(即值类型),它只会返回以下七个值:

  1. undefined
  2. boolean
  3. string
  4. number
  5. object
  6. function
  7. 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() 方法~