就是说不想上班为了包包也要上班啊
7.31的第一次面试
1.数组去重
(1)JS
function rmSame(ary){
for(let i=0;i
(2)set方法
function rmSame(ary) {
return Array.from(new Set(ary));
}
2.谈谈深拷贝是什么?
深拷贝就是拷贝引用数据类型,运用递归可以实现深拷贝。
function deepClone(obj) {
var newObj = obj instanceof Array ? [] : {};
//obj属于基本数据类型,直接返回obj
if (typeof obj !== 'object') {
return obj;
} else {
//obj属于数组或对象,遍历它们
for (var i in obj) {
newObj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i];
}
}
return newObj;
}
3.vue父传子如何传值?
要用到props
8.1第二次面试:
1.深拷贝又一次问到。。
2.一个js
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 0)
}
console.log(i);
先打印后面的5 然后打印5个5 因为定时器是异步操作,要等主队列代码全部走完。
3.多维数组转一维数组?
(1)使用reduce+递归
function change(ary) {
let arr = ary.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? change(next) : next);
}, []);
return arr;
}
(2)使用map()方法
function change(arr){
let arr1 = (arr + '').split(',');//将数组转字符串后再以逗号分隔转为数组
let arr2 = arr1.map(item=>Number(item));
return arr2;
}
4.async与await原理?
。。。并不会啊 看了大神们的讲解也是不会 co模块与执行器函数的语法糖???
5.请求头部包含哪些?
Accept:浏览器能够处理的内容类型
Accept-Charset:浏览器能够显示的字符集
Accept-Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Connection:浏览器与服务器之间连接的类型
Cookie:当前页面设置的任何Cookie
Host:发出请求的页面所在的域
Referer:发出请求的页面的URL
User-Agent:浏览器的用户代理字符串
6.new一个对象之后与函数执行有什么区别?
构造函数有自己的属性和方法,构造函数中的this指向当前new粗来的实例;
函数中的this指向window。
7.jwt是什么
json web token,详见阮一峰文章http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
8.三次握手
8.2面试
1.jqury.extend()与jqury.fn.extend()有什么区别?
(1)两者调用方式不同:
jQuery.extend(),一般由传入的全局函数来调用,主要是用来拓展个全局函数,如.init(),.ajax();
jQuery.fn.extend(),一般由具体的实例对象来调用,可以用来拓展个选择器,例如$.fn.each();
(2)两者的主要功能作用不同:
jQuery.extend(object); 为扩展jQuery类本身,为自身添加新的方法。
jQuery.fn.extend(object);给jQuery对象添加方法
(3)大部分插件都是用jQuery.fn.extend()
(4)Jquery的扩展方法原型是:extend(dest,src1,src2,src3...);
它的含义是将src1,src2,src3...合并到dest中,返回值为合并后的dest,由此可以看出该方法合并后,是修改了dest的结构的。
如果想要得到合并的结果却又不想修改dest的结构,可以如下使用:
var newSrc=$.extend({},src1,src2,src3...)//也就是将"{}"作为dest参数。
这样就可以将src1,src2,src3...进行合并,然后将合并结果返回给newSrc了。如下例:
var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})
那么合并后的结果: result={name:"Jerry",age:21,sex:"Boy"}
也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。
2.window对象是什么?document对象是什么?
Window – 代表浏览器中一个打开的窗口,包括属性方法window.location,alert,setInterval等;
document是window的子对象,代表整个HTML 文档,可用来访问页面中的所有元素。
3.fetch ajax axios有什么区别?
(1)$.ajax()
$.ajax({
type: 'POST',
url: url,
data: data,
dataType: dataType,
success: function () {},
error: function () {}
});
优缺点:
- 本身是针对MVC的编程,不符合现在前端MVVM的浪潮
- 基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
- JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理
(2)axios
axios({
method: 'post',
url: '/user',
data: {
name:'heheda'
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
优缺点:
- 从 node.js 创建 http 请求
- 支持 Promise API
- 客户端支持防止CSRF
- 自动转换JSON数据
- 提供了一些并发请求的接口
- 但是不支持jsonp,需要自己实现
(3)fetch
try {
let response = await fetch(url);
let data = response.json();
console.log(data);
} catch(e) {
console.log("Oops, error", e);
}
优缺点:
- 符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里
- 更好更方便的写法,更加底层,提供的API丰富(request, response)
- 脱离了XHR,是ES规范里新的实现方式
1)fetchtch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理
2)fetch默认不会带cookie,需要添加配置项
3)fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费
4)fetch没有办法原生监测请求的进度,而XHR可以
8.3面试
1.怎么给预加载的元素绑定事件?
我回答的是在回调函数中用jq的on动态绑定事件
2.jqueryd的attr与prop有什么区别?
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
3.vue动态路由?
路由导航功能是不能传递参数的,也就是说是静态路由。
而能传递参数的路由模式,由于可以传递参数,所以其对应的路由数量是不确定的,故称之为 “动态路由”;
首页
“路径参数”使用冒号 : 标记, 路径参数会被设置为this.route.params的属性,可以在组件内通过this.route.params来访问。
例如:
this.$route.params.id
this.$route.params.name