0
点赞
收藏
分享

微信扫一扫

前端小组考核题

鱼满舱 2022-10-09 阅读 75

一、JS部分:

 1、深、浅拷贝的区别?你知道哪些实现深拷贝的方法?

实现深拷贝的方法:

(1)利用递归实现

var obj = {   //原数据,包含字符串、对象、函数、数组等不同的类型
       name:"test",
       main:{
           a:1,
           b:2
       },
       fn:function(){
           
       },
        friends:[1,2,3,[22,33]]
   }
 
   function copy(obj){
        let newobj = null;   //声明一个变量用来储存拷贝之后的内容
        
     //判断数据类型是否是复杂类型,如果是则调用自己,再次循环,如果不是,直接赋值即可,
     //由于null不可以循环但类型又是object,所以这个需要对null进行判断
        if(typeof(obj) == 'object' && obj !== null){ 
        
	//声明一个变量用以储存拷贝出来的值,根据参数的具体数据类型声明不同的类型来储存
            newobj = obj instanceof Array? [] : {};   
            
	//循环obj 中的每一项,如果里面还有复杂数据类型,则直接利用递归再次调用copy函数
            for(var i in obj){  
                newobj[i] = copy(obj[i])
            }
        }else{
            newobj = obj
        }    
        console.log('77',newobj)
      return newobj;    //函数必须有返回值,否则结构为undefined
   }
 
    var obj2 = copy(obj)
    obj2.name = '修改成功'
    obj2.main.a = 100
   console.log(obj)
   console.log(obj2)

(2)json中的parse和stringify 

var arr = ['jack',25,{hobby:'tennise'}];
        let arr1 = JSON.parse(JSON.stringify(arr))
        arr1[2].hobby='rose'
        arr1[0]='rose'
        console.log( arr[2].hobby) //tennise
        console.log( arr[0]) //jack

(3)Jquery的$.extend: 

        var defaults = {name:'张三',age:18,sex:"true",scores:{chinese:70,science:100}};
        var options = {name:'李四',age:20,scores:{chinese:98,math:99,english:100}}
        var settings = $.extend(true,defaults,options);
        console.log(defaults);
        console.log(options);
        console.log(settings);

2、如何判断一个函数是否作为了构造函数?

     使用instanceof 判断:

    

3、new操作符都做了哪些事情?

 4、什么是类数组?列举你知道的类数组转为数组的方法。

5、如图,连续多次bind()的结果是什么?

6、说说什么是防抖和节流?尝试自定义防抖函数debounce和节流函数throttle?

 7、写出 ['10', '10', '10', '10', '10'].map(parseInt) 的结果

8、ES6箭头函数和普通函数有哪些区别?

9、如何使用js计算一个html页面中有多少种标签?

10、 写出下面代码的输出结果:

(1)提示: 变量提升

答案:undefined 10

(2)提示:函数提升

答案:

11、 map方法和forEach的不同之处?

二、Vue2部分 

1、v-show和v-if的主要区别 ?

2、vue2中的data是什么类型?解释为什么这样设计。

3、vue-router传参的方式有哪些?

4、你知道哪些vue-router的钩子函数,说说他们都是什么时候触发的?

 5、vue组件之间的通信方式有哪些?

6、简述vue生命周期

7、什么是SPA?说说SPA和MPA的优缺点

8、简述Vue2响应式原理。

 三、算法部分:(不使用第三方库)

1、使用js实现一个方法,对数组进行去重,尽可能多的写出不同的方式

一、利用ES6 Set去重(ES6中最常用)

function unique (arr) {
  return Array.from(new Set(arr))
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
 //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]

不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象,后面的高阶方法会添加去掉重复“{}”的方法。

二、利用for嵌套for,然后splice去重(ES5中最常用)

function unique(arr){            
        for(var i=0; i<arr.length; i++){
            for(var j=i+1; j<arr.length; j++){
                if(arr[i]==arr[j]){         //第一个等同于第二个,splice方法删除第二个
                    arr.splice(j,1);
                    j--;
                }
            }
        }
return arr;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
    //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]     //NaN和{}没有去重,两个null直接消失了

双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。

2、用js实现一个方法:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找出那个只出现一次元素。

var singleNumber =function(nums){ 
    //声明一个空对象用于记录 
    var obj={};
    for(var i=0;i<nums.length;i++){
    	//此时读取对象的属性需要用[]
	if(!obj[nums[i]]){
	    obj[nums[i]] =1;
	}
	else{
	    obj[nums[i]]+=1;
	}
   //取出属性值为1的
   for(var j in obj){
   	if(obj[j] ==1)
	   return j;
	}
} 
举报

相关推荐

前端小组考核试题

考核题一:小乌龟爬行

分小组

爬豆瓣小组

【TortoiseSVN】小组作业

小组分核桃

效绩考核

文件包含考核

0 条评论