1.forEach 与 map 的相同与不同
- 相同点
- 都是循环遍历数组中的每一项
- 每次执行匿名函数都支持三个参数,参数分别是item index arr
3.匿名函数中的this都是指向window
4.只能遍历数组
- 不同点
1.forEach()针对每一个元素执行提供的函数,对数据的操作后,会改变原数组。
var arr1 = [0,2,4,6,8];
var newArr1 = arr1.forEach(function(item,index,arr1){
console.log(this);
console.log(arr1);
arr1[index] = item/2;
},this);
console.log(arr1);
console.log(newArr1);
**使用场景:**并不打算改变数据的时候,而只是想用数据做一些事情 ,比如存入数据库或则打印出来。
2.map()创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来
var arr = [0,2,4,6,8];
var newArr = arr.map(function(item,index,arr){
console.log(this);
console.log(arr);
return item/2;
},this);
console.log(newArr);
使用场景:map()适用于你要改变数据值的时候。不仅仅相对于forEach更快,而且分配内存空间存储新数组并且返回新的数组
2.递归的理解
通俗的讲:自己调用自己,使用递归函数一定要注意处理不当就会进入死循环
问:有一堆桃子,每天吃掉一半,挑出一个坏的扔掉,第6天的时候发现还剩1个桃子,问原来有多少个桃子。
我们用递归函数来解决这个问题,代码如下:
输出结果为190个。
3.vue 多个样式的class 的三木运算
<el-butten type='text' class="publicStyle" :class="[isShow1?'theme-color-primary':'shiti']" @click="click11()">试题</el-butten><el-butten type='text' class="publicStyle" :class="[isShow2?'theme-color-primary':'shijuan']" @click="click22()">试卷</el-butten>
{{items.isShow2?'取消选题':'选题'}}
4.代码网址
5.为什么会出现跨域,什么是跨域,解决跨域的方法?
答:浏览器处于信息安全考虑提出的同源策略(即同协议同域名同端口)为了迎合这一约定而出现跨域,而跨域是指一个域下的文档或脚本试图去请求另一个域下的资源。
我们经常使用实现跨域的方法:“http-proxy-middleware”用于后台将请求转发给其它服务器。例如:我们当前主机A为http://localhost:3000/,现在浏览器发送一个请求,请求接口/api,这个请求的数据在另外一台服务器B上(http://10.119.168.87:4000),这时,就可通过在A主机设置代理,直接将请求发送给B主机。
6.简述浅拷贝和深拷贝,以及深拷贝的实现方法
答:深拷贝和浅拷贝最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用,深拷贝在计算机中开辟了一块内存地址用于存放复制的对象,而浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象被改变了,那么浅拷贝出来的对象也会相应改变。
(1)深拷贝 最简单的方法就是
JSON.parse(JSON.stringify())
function deepCopy(o) {
return JSON.parse(JSON.stringify(o))}
var c = { age: 1,name: undefined,sex: null,tel: /^1[34578]\d{9}$/,
say: () => {console.log('hahha')
}}
(2)浅拷贝
2.1. object.assign(target,source)Object.assign
方法只复制源对象中可枚举的属性和对象自身的属性函数的节流和防抖的实现原理
7.函数的节流和防抖的实现原理
防抖 是某一段里执行一次使用场景输入框搜索联想窗口改变
节流 是间隔一段时间执行一次使用场景王者技能不断触发,单位时间里只触发一次滑倒底部,自动加载
8.简述promise,以及用promise解决什么问题?
(1)Promise是异步编程的一种解决方案:
从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承
诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),
rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行
(2)promise是用来解决两个问题的:
回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象promise可以支持多个并发的请求,获取并发请求中的数据这个promise可以解决异步的问题,本身不能说promise是异步的
9.async/await + promise + setTimeout执行顺序;
通常是asyn cawait promiseset Timeout await 有时候也与写代码的人有关
10.编写一个方法去掉数组里面重复的内容arr=[1,2,3,4,5,1,2,3]。
es6
Array.from(new Set(arr));
Indexof
for (var i = 0; i < arr.length; i++) {
if (array .indexOf(arr[i]) === -1) {
array .push(arr[i]
)}