typeOf
typeOf 返回的数据类型包括已下几种:
'number' , 'string' , 'boolean' , 'symbol' , 'undefined' , 'function' , 'object' 7中类型, 返回值是字符串;
这里有一个bug,null返回的类型是'object',为什么会出现这个问题呢?
在 JavaScript 中 值以 32 位的单位存储,包括一个小型类型标记(1-3 位)和值的实际数据。类型标记存储在单元的较低位上。一共有 5 种类型:
- 000: object,表示这个数据是一个对象的引用。
- 1: int,表示这个数据是一个 31 位的有符号整型。
- 010: double,表示这个数据是一个双精度浮点数的引用。
- 100: string,表示这个数据是一个字符串的引用。
- 110: boolean,表示这个数据是一个布尔值。
instanceof
instanceof 是判断数据是否是某个对象的实例,返回一个布尔值
用法
function Person () {}
let p = new Person();
p instanceof Person; // true
Instanceof 的核心原理是检测某个实例对象的原型链上是否存在构造函数的prototype
具体实现一下吧 这里涉及到原型链的知识点, 具体原型链 的详细内容
const myINstanceof = (leftObj, rightObj) => {
let prototypeObj = rightObj.prototype;
leftObj= leftObj.__proto__;
while(leftObj) {
if (leftObj === prototypeObj) {
return true;
}
leftObj = leftObj.__proto__;
}
return false
};
constructor
constructor 可以查看目标构造函数,也可以判断数据类型,但是不能判断null和undefined
用法
(1).constructor === Number; // true
'str'.constructor === String; // true
true.constructor === Boolean; // true;
({}).constructor === Object; // true;
Object.prototype.toString
用法
Object.prototype.toString.call([]) // '[object Array]'
Object.prototype.toString.call('str') // '[object String]'
Object.prototype.toString.call(true) // '[object Boolean]'
Object.prototype.toString.call(1) // '[object Number]'