检测数据类型的常用方法
- typeof
- instanceof
- Object.prototype.toString.call()
三种方式的区别
- typeof 只能检测基本数据类型 注意typeof null == 'object'
- instanceof 可以判断一个对象的具体类型,也有可能不准确,比如对数组的判断为object
- 所以可以采用 Object.prototype.toString.call()
数据类型的种类
- number
- string
- boolean
- undefined
- null
- object
- function
- symbol
typeof 的原理
js在底层存储变量的时候会在变量的机器码的地位1-3位存储其类型的信息
- 000 对像
- 010 浮点数
- 100 字符串
- 110 布尔值
- 1 整数 比较特殊的是 null 它的所有机器码都是0 undefined用−2^30整数表示
所以typeof null 的时候的结果是object
instanceof 实现的原理
- 主要是判断一个实例是否属于某种类型
- 当然也可以判断是否是其父类或者祖父类的实例
- 实现一个这样的简易函数
function my_instanceof (leftval,rightval) {
let rightproto = rightval.prototype
let leftval = leftval.__proto__;
while(true) {
if (leftval==rightproto) {
return true
}
if (leftval =='null') {
return false
}
leftval = leftval.__proto__
}
}
要全部理解还需要理解js 愿型链继承原理