前端offer收割机——每日一题

585 阅读3分钟

每天中午整理

之前总结的每日一题点这里: 3.8前每日一题

2022.3.8

1、Number.isNaN跟isNaN有什么区别?

isNaN存在隐式转换 Number.isNaN不存在类型转换的行为
isNaN接收到参数之后 会通过Number()方法尝试将这个参数转换成Number类型 如果成功返回false,如果失败返回true
Number.isNaN是判断传入的参数是否严格等于NaN(===)

相关扩展链接:

isNaN MDN解释

Number.isNaN MDN解释

2022.3.9

intanceof操作符的实现原理及实现

instanceof的原理就是不断在原型链上寻找实例的原型然后进行判断,直到找到实例的原型或者null为止
instanceof 主要的作用就是判断一个实例是否属于某种类型,也可以判断一个实例是否是其父类型或者祖先类型的实例。

// 迭代版
function myinstanceof(a, b) {
  let proto = Object.getPrototypeOf(a),
    prototype = b.prototype;
  while (true) {
    if (!proto) return false;
    if (proto === prototype) return true;
    proto = Object.getPrototypeOf(proto)
  }
}
// 递归版
function myinstanceof(a, b) {
  if (!a) return false
  a = Object.getPrototypeOf(a)
  if (a == b.prototype) {
    return true
  } else {
    return myinstanceof(a, b)
  }
}

2020.3.10

1.Loader和Plugin的区别是什么?
2.浏览器的本地存储的cookie了解多少?
3.在css中link和@import的区别是什么?
4.如何解决跨域问题?

Loader和Plugin的区别是什么
作用不同: loader:直译过来就是‘加载器’,默认情况下webpack只能解析js和json文件,如果想将其他文件也打包的话,就需要用到loader
plugin:直译过来就是‘插件’,plugin可以扩展webpack的功能,可以打包优化和压缩,重新定义环境变量,同时webpack提供了很多开箱即用的插件,比如html-weback-plugin等
用法不同:
loader:loader在module.rules中配置,类型是数组,每一项都是一个对象,该对象里面描述了对于什么类型的文件使用什么loader加载
plugin:plugin在plugins中单独配置,类型是数组,每一项都是一个plugin实例(即是通过构造函数传入)

浏览器的本地存储的cookie了解多少
cookie能够弥补http协议无状态的不足
cookie本质上就是浏览器里面存储的一个很小的文本文件,只有大约4K左右,内部是以键值对的方式存储。
cookie数据始终在同源的http请求中携带,即cookie在浏览器和服务器间来回传递。
cookie是明文传递的,安全性不高,很容易被非法用户截取篡改

#link和@import的区别是什么 @import是css提供的,只有导入样式的作用,link是html提供的标签,不仅可以加载css文件,还定义定义ref等属性
加载页面时,link引入的css被同时加载,@import引入的css将在页面加载完毕后才加载
link不存在兼容性问题,而@import在ie5之前不能识别
link支持通过js操作DOM,插入link标签来改变样式,而@import不支持

2022.3.12

1、浏览器和node中事件循环的区别
2、网络分层模型
3、浏览器的垃圾回收机制

1 浏览器和node中事件循环的区别

2 从上到下分别是应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

3前端的垃圾回收机制叫做GC 常见的有标记清除(进入环境标记,离开环境清除) 计数引用(引用计数 计数为0则清除) 不常见的有GC复制法 保守式GC 分代回收 增量式GC 三色标记法