![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
js手写面试题
__十七
这个作者很懒,什么都没留下…
展开
-
实现数组去重
<script> const arr1 = [1,2,3,5,2,5,6] // 1,es6方法 function unquieArr1(arr){ // Array.from(),根据参数来生成一个数组 return Array.from(new Set(arr)) } // 2,使用map function unq原创 2022-03-23 15:18:21 · 84 阅读 · 0 评论 -
实现数组扁平化
<script> // 1,递归实现 普通的递归思路很容易理解,就是通过循环递归的⽅式,⼀项⼀项地去遍历,如果每⼀项还是⼀个数组,那么就继续往下遍历,利⽤递归程序的⽅法,来实现数组的每⼀项的连接 let arr = [1,[2,3[4,5]]] function flatten1(arr){ let res = [] for(let i = 0;i<arr.le原创 2022-03-23 15:17:50 · 115 阅读 · 0 评论 -
*实现数组元素求和*
<script> let arr1 = [1,2,3,4,5,6,7,8,9] function sum(arr1){ /* reduce() 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数, 每一次运行 reducer 会将先前元素的计算结果作为参数传入, 最后将其结果汇总为单个返回值。原创 2022-03-23 15:17:18 · 341 阅读 · 0 评论 -
实现数组的乱序输出
<script> var swapArr = function (arr) { for (let i = 0; i < arr.length; i++) { /* 从min到max中随机产生一个数值 Math.random()*(max- min) + min 从min到max中随机原创 2022-03-23 15:16:02 · 624 阅读 · 0 评论 -
实现日期格式化函数
const dateFormat = function (dateInput, format) { var day = dateInput.getDate() var month = dateInput.getMonth() + 1 var year = dateInput.getFullYear() format = format.replace(/yyyy/, year) .原创 2022-03-23 15:15:21 · 364 阅读 · 0 评论 -
js中深拷贝和浅拷贝概念,并附手写代码
12,手写深拷贝浅拷⻉:浅拷⻉指的是将⼀个对象的属性值复制到另⼀个对象,如果有的属性的值为引⽤类型的话,那么会将这个引⽤的地址复制给对象,因此两个对象会有同⼀个引⽤类型的引⽤。浅拷⻉可以使⽤ Object.assign 和展开运算符来实现。深拷⻉:深拷⻉相对浅拷⻉⽽⾔,如果遇到属性值为引⽤类型的时候,它新建⼀个引⽤类型并将对应的值复制给它,因此对象获得的⼀个新的引⽤类型⽽不是⼀个原有类型的引⽤。深拷⻉对于⼀些对象可以使⽤ JSON 的两个函数来实现,但是由于 JSON 的对象格式⽐ js 的对象格式更加原创 2022-03-21 16:54:03 · 1568 阅读 · 0 评论 -
手写ajax请求
11,手写ajax请求ajax指的是通过js的异步通信,从服务器获取xml文档从中提取数据,再更新网页的对应部分,而不用去刷新整个网页。创建ajax请求的步骤:创建一个XMLRequest对象。在这个对象上使用open方法创建一个http请求,open方法所需要的参数是请求的方法,请求的路径,是否异步和用户的认证信息。在发起请求之前,可以为这个对象添加一些信息和监听函数,比如通过setRequestHeader方法来为请求添加头信息,还可以为这个额对象添加一个状态监听函数。一个XMLHttpRe原创 2022-03-21 16:52:47 · 2327 阅读 · 0 评论 -
手写call,apply,bind 方法
8,手写call函数call函数的实现步骤:1,判断调用对象是否为函数,即使我们是定义在函数原型上的,但是可能出现使用call等方式进行调用的情况2,判断传入的上下文对象是否存在,如果不存在,就设置为window3,处理传入的参数,截取第一个参数后的所有参数4,将函数作为上下文对象的一个属性5,使用上下文对象来调用这个方法,并保存返回结果6,删除刚才新增的属性7,返回结果<script> // 算法: Function.prototype.myC原创 2022-03-21 16:52:12 · 421 阅读 · 0 评论 -
手写类型判断函数
7,手写类型判断函数使用typeof,对于null和引用对象来说,输出的都是Object,因此没有办法来分辨到底是是什么引用类型<script> function getType(value){ // 判断数据是null的情况 if(value === null){ return value+''; } // 判断数据是引用类型的情况 if(t原创 2022-03-21 16:51:18 · 252 阅读 · 0 评论 -
手写节流函数
6,手写节流函数函数节流是指在规定的一个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只能有一次生效,节流可以使用在scroll函数的事件监听上面,通过事件节流来减低事件调用的频率。<script> function throttle(fn,delay){ let curTime = Date.now() return function(){原创 2022-03-21 16:50:29 · 679 阅读 · 0 评论 -
js--手写防抖函数
5,手写防抖函数函数防抖是指在事件被触发n秒之后再执行回调,如果在这n秒时间内事件又被触发,则会重新进行计时,这可以是用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。防抖应用的场景:scroll事件滚动触发搜索框输入查询表单验证按钮提交事件浏览器窗口缩放/** * 防抖函数 * @param method 事件触发的操作 * @param delay 多少毫秒内连续触发事件,不会执行 * @returns {Function} */function deb原创 2022-03-15 13:28:59 · 2356 阅读 · 0 评论 -
js--手写promise.all
核心思路:接收一个Promise实例的数组或具有Iterator接口的对象作为参数这个方法返回一个新的promise对象遍历传入的参数,用promise.reslove()将参数“包一层”,使其变成一个promise对象参数所有的回调成功才是成功,返回值数组与参数顺序是一致的参数数组其中一个失败,则触发失败状态,第一个触发失败的promise错误信息作为promise.all的错误信息代码实现:一般来说,promise.all 用来处理多个并发请求,也是为了页面数据构造的方便,将一个页面所原创 2022-03-15 13:28:22 · 761 阅读 · 0 评论 -
手写promise
<script> const PENDING = 'pending' const RESOLVED = 'resolved' const REJECTED = 'rejected' function MyPromise(fn){ // 保存初始化状态 var self = this // 初始化状态 this.state = PENDIN原创 2022-03-12 14:25:41 · 59 阅读 · 0 评论 -
手写new操作符
<script> /* 在调用new的过程中会发生以上四件事 1,首先创建一个新的空对象 2,设置原型,将对象的原型设置为函数的prototype对象 3,将函数中的this指向这个对象,指向构造函数的代码(为这个新对象添加属性) 4,判断函数的返回值类型,如果是值类型,就返回创建的对象, 如果是引用类型,就返回这个引用类型的对象原创 2022-03-11 14:15:19 · 144 阅读 · 0 评论 -
手写instanceof方法
<script> /* 原理: instanceof运算符用于判断构造函数的prototype属性是否出现在对象的原型链中的任何位置 实现步骤: 1,首先获取类型的原型 2,然后获得对象的原型 3,然后一直循环判断对象的原型是否等于类型的原型,知道对象原型为null,因为原型链最终为null */ function my原创 2022-03-11 14:14:21 · 267 阅读 · 0 评论