位置: IT常识 - 正文
推荐整理分享前端最新2022面试题(JS)(最新前端技术),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:前端 2020,前端2021,2021前端最新技术,前端最新资讯,前端2021,前端2021,前端2021,2021前端最新技术,内容如对您有帮助,希望把文章链接给更多的朋友!
class 类的继承ES6中不再像ES5一样使用原型链实现继承,而是引入Class这个概念
async、await使用 async/await, 搭配promise,可以通过编写形似同步的代码来处理异步流程, 提高代码的简洁性和可读性async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成
Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理、强大
Symbol是一种基本类型。Symbol 通过调用symbol函数产生,它接收一个可选的名字参数,该函数返回的symbol是唯一的
Proxy代理使用代理(Proxy)监听对象的操作,然后可以做一些相应事情
Set是类似于数组的数据集合,无序,插入删除速度快,元素不重复,查找速度快。
Map是一个类似对象的数据结构,和对象不同的在于它的key可以是任意类型,但是对象只能使用string和symbol类型,Map的存储关联性更强
生成器函数可以进行阻断函数执行的过程,通过传参可以传入新的值进入函数继续执行,可以用于将异步变为阻塞式同步
4、数组排序的方式 ?冒泡排序: for(var i=0;i<arr.length-1;i++){ for(var j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } if(arr[j]===arr[j-1]) i++; }选择排序: for(var i=0;i<arr.length;i++){ var min=i; for(var j=i+1;j<arr.length;j++){ if(arr[j]<arr[min]) min=j; } if(min!==i){ var temp=arr[i]; arr[i]=arr[min]; arr[min]=temp; } if(arr[i]===arr[i+1])i++;}快速排序:function quickSort(arr) { if (arr.length <= 1) return arr; var centerIndex = ~~(arr.length / 2); var left = []; var right = []; for (var i = 0; i < arr.length; i++) { if (i === centerIndex) continue; if (arr[i] < arr[centerIndex]) left.push(arr[i]); else right.push(arr[i]); } return quickSort(left).concat(arr[centerIndex], quickSort(right)); }5、什么是事件轮询(EventLoop) ?一个用来等待和发送消息和事件的程序结构。
1、所有任务都在主线程上执行,形成一个执行栈。2、主线程发现有异步任务,如果是微任务就把他放到微任务的消息队列里,如果是宏任务就把他放到宏任务的消息队列里。3、执行栈所有同步任务执行完毕。4、执行微任务队列,之后再执行宏任务队列。5、轮询第4步。6、数组的一些API, 哪些能够改变原数组, 那些不能 ?改变原数组的方法:shift()unshift()pop()push()reverse()sort()splice()不改变原数组的方法:concat()every()filter()forEach()indexOf()join()lastIndexOf()map()some()every()slice()reduce()reduceRight() flat()flatMap()find()7、for 循环与 forEach 的区别 ?1.for循环可以使用break跳出循环,但forEach不能。2.for循环可以控制循环起点(i初始化的数字决定循环的起点),forEach只能默认从索引0开始。3.for循环过程中支持修改索引(修改 i),但forEach做不到(底层控制index自增,无法左右它)。8、深浅拷贝 ?深拷贝:function cloneObject(source, target) { if (target === undefined) { if (Node.prototype.isPrototypeOf(source)) { target = document.createElement(source.nodeName); target.style = source.style.cssText; } else if (source.constructor === Uint8Array) { target = new source.constructor(Array.from(source)); } else if (source.constructor === Date || source.constructor === RegExp || source.constructor === Set || source .constructor === Map) { target = new source.constructor(source); } else if (source.constructor === Function) { var arg = source.toString().match(/\((.*?)\)/)[1]; var content = source.toString().replace(/\n|\r/g, "").match(/\{(.*)\}/)[1]; target = new Function(arg, content) } else { target = new source.constructor(); } } var names = Object.getOwnPropertyNames(source).concat(Object.getOwnPropertySymbols(source)); for (var i = 0; i < names.length; i++) { if (names[i] === "constructor") { Object.defineProperty(target, "constructor", { value: source.constructor }); continue; } var desc = Object.getOwnPropertyDescriptor(source, names[i]); if ((typeof desc.value === "object" && desc.value !== null) || typeof desc.value === "function") { var o = cloneObject(desc.value) Object.defineProperty(target, names[i], { value: o, enumerable: desc.enumerable, writable: desc.writable, configurable: desc.configurable }) } else { Object.defineProperty(target, names[i], desc); } } return target; }浅拷贝: 1、Object.assign(目标对象,源对象) 2、 var obj1={} for(var key in obj){ obj1[key]=obj[key] } 3、obj1={...obj};9、url 的组成 ? http:/https: 协议 www.baidu.com 域名 :8080 端口 /sf/vsearch 路径 ?wd=百度热搜 查询(可有可无) #a=1&b=2 哈希值(可有可无) 10、常见的跨域方式 ?JSONP: JSONP是利用外链脚本,没有跨源限制的特点,来实现跨源请求的一种技术。CORS: cors:跨域资源共享,是一种实现跨源请求数据的技术。这就是跨源问题的解决方案之一。也是广泛的解决方案。正向代理 先搭建一个属于自己的代理服务器1、用户发送请求到自己的代理服务器2、自己的代理服务器发送请求到服务器3、服务器将数据返回到自己的代理服务器4、自己的代理服务器再将数据返回给用户反向代理1、用户发送请求到服务器(访问的其实是反向代理服务器,但用户不知道)2、反向代理服务器发送请求到真正的服务器3、真正的服务器将数据返回给反向代理服务器4、反向代理服务器再将数据返回给用户通过postMassage,11、Promise 的使用场景 ?场景1:获取文件信息。场景2:配合AJAX获取信息场景3:解决回调地狱,实现串行任务队列。场景4: node中进行本地操作的异步过程12、let, const, var 的区别 ?上一篇:【TypeScript】TS条件类型(十)(typescript some)
下一篇:uniapp开发APP从开发到上架全过程(一)(uniapp开发app视频教程)
友情链接: 武汉网站建设