红包口令见文章;西安邮储面试题!

百科   2024-06-27 12:35   陕西  

蓝色字关注橘子的分享

支付宝口令红包

这次收入极低,所以我全部都发了,每个红包应该很少,等以后如果流量大一点,接单了,再发多一点。你们多几个人看,浏览量上去了,报价就高了,发的也多....

口令为:橘子的分享口令


西安邮储面试题

如何知道一个对象中是否含有这个键

可以使用hasOwn来判断,比如

const obj = { name"alex" };

console.log(Object.hasOwn(obj, "name")); // true

或者可以使用其他的方法,比如这样

const obj = { name"alex" };

const keys = Object.keys(obj);

console.log(keys.includes("name")); // true

如何判断一个数据的数据类型

这个我以前总结过,有很多方式,其实最好的还是Object.prototype.toString.call(data).slice(8, -1)或者instanceof

点击这里访问

vue2.0和3.0的区别

  • 响应式原理不同,2使用的object.defineProperty而3使用的proxy,解决了2.0中无法对数组和对象进行新增删除的监听。
  • 生命周期不同
  • 数据定义的方式不同
  • 3支持多节点

forEach和map区别

  • map默认有返回值,返回一个和原来数组一样长度的数据,并且不改变原数组,同时可以配合其他方法链式调用,比如filter。
  • forEach默认没有返回值,在循环的时候可以修改当前数组的原始数据。在运行速度上略慢于map。

sort排序改变原数组吗

sort排序是就地排序,改变原数组,如果不想要改变原数组,需要用到最新的函数toSorted()

for in 和 for of区别

for...in 循环只遍历可枚举属性

const obj = { name"alex"age18 };

for (const key in obj) {
  console.log("key", key); // name age
  if (Object.hasOwn(obj, key)) {
    const element = obj[key];
    console.log("element", element); // alex  18
  }
}

const data = [12345];
for (const key in data) {
    console.log(key); // 0,1,2,3,4 因为数据的可以就是下标索引
}

for of 语句执行一个循环,该循环处理来自可迭代对象的值序列

const data = [12345];

for (const value of data) {
    console.log(value); // 1,2,3,4,5
}

const data = "hello";

for (const value of data) {
  console.log(value); // h,e,l,l,o
}

const data = new Set([11234]);

for (const value of data) {
  console.log(value); // 1,2,3,4
}

跨域

跨域是协议(http/https)、域名、端口号只要一个不符合就是跨域了。

  • 请求跨域,后端使用cors解决跨域,前端使用代理也可以,但是打包后代理不生效,可以配置nginx做转发到指定ip
  • iframe跨域,使用不同的协议或者域名端口,继承到项目中,也会跨域。比如建立一个html,嵌入百度的就会。(面试的时候尽量还是直说请求跨域吧,万一说了iframe跨域,面试官又继续问了这个很深入的问题,答不上来就尴尬了!)
<!DOCTYPE html>
<html lang="zh_cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <iframe src="https://www.baidu.com" frameborder="0"></iframe>
</body>
</html>

Refused to frame 'https://www.baidu.com/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com".就会提醒你违反了安全策略,如果你顺利加载出来,还想要通信的话,可能也会告诉你跨域通信了

vuex 和pinia的区别

pinia更加轻量化,同时个vuex不同,pinia是多store,而不是vuex的单例模式,只有一个store。而且pinia更加支持typescript。

vuex在刷新页面数据会丢失怎么解决

可以在页面刷新的时候,重新调用存在vuex中的数据对应的接口,然后保存在session或者local中。

搭建框架的步骤

  • 技术选型,确定好使用哪些技术。
  • 了解整体需求,抽离复用模块
  • 根据功能模块配置项目菜单
  • 修改打包配置
  • 新建readme文档
  • 新建git仓库,以及git代码提交规范

内存溢出怎样处理

  • 重新分配更加合适的内存
  • 查找代码中是否存在死循环或者没有回收的内存代码

JS阻塞和非阻塞

其实可以理解为同步和异步,同步就是代码一行行执行,只有上一行执行完毕后才能执行下一行代码,也就是阻塞,前面的代码阻塞后面的代码。但是在实际开发中,我们很多情况会遇到不能阻塞后续代码加载的情况,比如网络请求,文件操作等等。所有就有异步执行,其他的代码正常执行,在遇到网络请求后,单独开一个微任务给请求,其他的正常按照同步执行,在请求结束后赋值,结束本次微任务。从而达到了非阻塞的效果。

ES6更新内容


讲自己项目的优化点,有提到过权限的设计;

前端权限一般涉及到的是菜单权限和按钮权限,菜单通过后端配置动态显示,按钮权限通过后端返回当前用户的权限列表来匹配,通过v-if来控制是否显示按钮。

优化点一般针对打包速度,页面打开速度,首屏加载速度,项目大小,用户体验等。

深复制(可以用已有的插件),获取日期年月日怎么写

  • 深拷贝
function deepClone(obj, hash = new WeakMap()) {
  if (obj === nullreturn obj; // 如果是null或者undefined我就不进行拷贝操作
  if (obj instanceof Datereturn new Date(obj);
  if (obj instanceof RegExpreturn new RegExp(obj);
  // 可能是对象或者普通的值  如果是函数的话是不需要深拷贝
  if (typeof obj !== "object"return obj;
  // 是对象的话就要进行深拷贝
  if (hash.get(obj)) return hash.get(obj);
  let cloneObj = new obj.constructor();
  // 找到的是所属类原型上的constructor,而原型上的 constructor指向的是当前类本身
  hash.set(obj, cloneObj);
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      // 实现一个递归拷贝
      cloneObj[key] = deepClone(obj[key], hash);
    }
  }
  return cloneObj;
}
let obj = { name1address: { x100 } };
obj.o = obj; // 对象存在循环引用的情况
let d = deepClone(obj);
obj.address.x = 200;
console.log(d);
  • 获取年月日
const year = new Date().getFullYear()
const month = new Date().getMonth() + 1
const day = new Date().getDate()

const time = dayjs(new Date()).format('YYYY-MM-DD')

上传,下载文件有处理过吗?多个文件同时上传怎样处理?上传失败了怎么找出是哪个文件

  • 在上传文件的时候,使用formdata,将多个文件append进去,直接调用一个接口上传即可。
  • 多个文件单个上传,或者同时调用多个接口进行上传,将上传的文件作为一个队列,控制每次上传的个数,将上传失败的文件打上标签,比如文件上传超时等问题引起。

    不要让时代的悲哀,

    成为你我的悲哀!


往期回顾
BREAK AWAY
本文来源:橘子的分享微信公众号

编辑/橘子orange
图片/橘子orange
排版/何火星星
©橘子的分享

橘子的分享
不要让时代的悲哀,成为你我的悲哀!
 最新文章