# typeof

  • 分不清 object、 null、 array
let arr = [1, 2]

console.log(arr.__proto__ === Array.prototype)      // true
console.log(arr.__proto__ === Object.prototype)     // false

let obj = {}
let fun = function(){}
let fun2 = () => {}

// 分不清 object、 null、 array
console.log(typeof obj)     // object
console.log(typeof arr)     // object
console.log(typeof fun)     // function
console.log(typeof fun2)     // function
console.log(typeof undefined)     // undefined
console.log(typeof null)     // object
console.log(typeof true)     // boolean
console.log(typeof 1)     // number
console.log(typeof NaN)     // number
console.log(typeof 'aa')     // string

# Object.prototype.toString.call()

  • Object对象和它的原型链上各自有一个toString()方法
  • 第一个返回的是一个函数,第二个返回的是值类型。
console.log(getType(obj))    // [object Object]
console.log(getType(arr))    // [object Array]
console.log(getType(fun))    // [object Function]
console.log(getType(fun2))   // [object Function]
console.log(getType(undefined))  // [object Undefined]
console.log(getType(null))   // [object Null]
console.log(getType(true))   // [object Boolean]
console.log(getType(1))  // [object Number]
console.log(getType('aa'))  // [object String]

function getType(v) {
    return Object.prototype.toString.call(v)
}