面试题1
js中基础类型和引用类型有哪些,怎么判断(typeof, instaceof, Object.prototype.toString.call()),这几个方法的各自优缺点,instaceof 大概原理(代码写出来)
1:有哪些
- 基础类型string, boolean, number, null, undefined, symbol,bigInt
- 引用类型Object 细分(Array, Date, RegExp, Set, Map等)
2:怎么去判断各自优缺点
- typeof 只能判断基础类型还要去掉null
- instanceof 能检测array,Date等类型但不能检测基础类型,而且[] intanceof Object也是对的范围广了,并且因为是原型查找容易被改
// 纂改例子
const time = new Date();
console.log(time instanceof Array); // false;
const time = new Date();
time.__proto__ = [];
console.log(time instanceof Array); // true
- object.prototype.toString.call 能准确判断 但是写法长了点
3:instaceof原理
// 在写原理之前我们理一下思路
[] instanceof Array // 意思就是A的__proto__能不能找到Array.prototype
const instanceof = (newObject, origin) => {
let newObjectProto = newObject.__proto__;
let originPrototype = origin.prototype;
// 一个循环如果不等一直查找,直到找到object原型的__proto__也就是null
while(true) {
if(newObjectProto === null) {
return false;
}
if(newObjectProto === originPrototype) {
return true;
}
newObjectProto = newObjectProto.__proto__
}
}
网友评论