面试题记录

面试题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__
}
}

你可能感兴趣的:(面试题记录)