---
url: https://sugarat.top/interview/other/judgeType.md
---

# typeof 是否能正确判断类型？instanceof 能正确判断对象的原理是什么？

## typeof

* typeof对于原始值类型除了null外都可以准确判断
* typeof 对于对象来说，除了函数都会显示 object

**所以说 typeof 并不能准确判断变量到底是什么类型**

```js
typeof 1    // number
typeof '1'  // string
typeof true // boolean
typeof undefined // undefined
typeof Symbol // symbol
typeof null // object(实际上null不是Object)
typeof [] // object
typeof {} // object
typeof Function // function 
```

## instanceof

通过原型链来判断的

```js
function People() { }
let p = new People()
console.log(p instanceof People) // true

function Teacher() { }
Teacher.prototype = Object.create(People.prototype)
function Student() { }
Student.prototype = Object.create(People.prototype)

let t = new Teacher()
console.log(t instanceof Teacher) // true
console.log(t instanceof People) // true
console.log(t instanceof Student) // false
```

## myInstanceof

```js
function myInstanceof(target, origin) {
    let prototype = origin.prototype
    target = Object.getPrototypeOf(target)
    while (true) {
        if (target === null || target === undefined) {
            return false
        }
        if (target === prototype) {
            return true
        }
        target = Object.getPrototypeOf(target)
    }
}
```
