面试啊面试

就是说不想上班为了包包也要上班啊
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
    

    你可能感兴趣的:(面试啊面试)