typeof类型判断
typeof 是否能正确判断类型?instanceof 能正确判断对象的原理是什么
- typeof 对于原始类型来说,除了 null 都可以显示正确的类型
typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof 对于对象来说,除了函数都会显示 object,所以说 typeof 并不能准确判断变量到底是什么类型
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'
如果我们想判断一个对象的正确类型,这时候可以考虑使用 instanceof,因为内部机制是通过原型链来判断的
const Person = function() {}
const p1 = new Person()
p1 instanceof Person // true
var str = 'hello world'
str instanceof String // false
var str1 = new String('hello world')
str1 instanceof String // true
对于原始类型来说,你想直接通过 instanceof来判断类型是不行的
- typeof
-
- 直接在计算机底层基于数据类型的值(二进制)进行检测
- typeof null为object 原因是对象存在在计算机中,都是以000开始的二进制存储,所以检测出来的结果是对象
- typeof 普通对象/数组对象/正则对象/日期对象 都是object
- typeof NaN === 'number'
- instanceof
-
- 检测当前实例是否属于这个类的
- 底层机制:只要当前类出现在实例的原型上,结果都是true
- 不能检测基本数据类型
- constructor
-
- 支持基本类型
- constructor可以随便改,也不准
- Object.prototype.toString.call([val])
-
- 返回当前实例所属类信息