js笔试题小试牛刀(2)

//数组去重
//方法一
var arr = [0,2,3,4,4,0,2];
var obj={}
var arrs=[]
for(var i=0;i<arr.length;i++){
	if(!obj[arr[i]]){
		obj[arr[i]]=1;
		arrs.push(arr[i])
	}
}
console.log(arrs)
//方法二
var arr = [0,2,3,4,4,0,2];
var arrs=[];
for(var i=0;i<arr.length;i++){
	if(arrs.indexOf(arr[i]) < 0){
		arrs.push(arr[i])
	}
}
console.log(arrs);
//
//
//方法三
var arr = [0,2,3,4,4,0,2];
var arrs=arr.filter(function(currentValue,index,arr){
	return arr.indexOf(currentValue) === index
}) 
console.log(arrs)

请用es5与es6分别封装一个数组去重的方法

/* es5去重 */
var arr =[5,"5",5,2,"2",1,3];
function unique(arr){
var brr = [];
var obj = {};
for(var i=0;i<arr.length;i++){
	if(!obj[arr[i]]){
		obj[arr[i]]=true;
		brr.push(arr[i]);
	}
}
return brr;
}
console.log(unique(arr));
/* es6去重 */
用new Set()去重,缺点是不同类型的不能去重
var set =new Set(arr);
consol.log(set)

封装一个对象深拷贝的方法

浅拷贝:拷贝的是对象的属性,缺点是一个改变相互影响;
深拷贝:拷贝的是原对象,一个改变互相不影响;

    function copy(oldObj,deep){
        let newObj = {};
        if (oldObj instanceof Array){
            newObj = [];
        }
        for (let key in oldObj){
            let value = oldObj[key];
            if (!!deep && typeof value === "object" && value !== null){ 
                newObj[key] = copy(value,deep);
            } else{           
                newObj[key] = value;
            }
        }
        return newObj;
    }

let obj1 = {a:1,b:{c:2}};
let obj2 = copy(obj1,true);  //深拷贝
let obj3 = copy(obj1,false); //浅拷贝
obj1.b.c = 3;
console.log(obj2);  //{a:1,b:{c:2}}
console.log(obj3);  //{a:1,b:{c:3}}

用正则表达式写一个身份证验证

var reg1 = /^\d{17}[x\d]$/;
var str1 = '421123200009067621';
console.log(reg1.test(str1))     //结果为true

封装一个函数,判断是否为数组

var arr=[1,2,3,4];
function isArray(arr){
	if(arr instanceof array){
		return '数组'
	}
}
console,log(isArray(arr))

分别解释数组的方法:pop(),push(),unshift(),shift()

pop() 删除数组末尾,返回删除的内容
push() 向数组末尾添加内容,返回的是数组长度
unshift() 向数组第一位添加内容,返回的是数组长度
shift() 删除数组第一位,返回删除的内容

dom操作——怎样添加、移除、移动、复制、创建和查找子节点

添加:appendChild
移除:removeChild
移动: replaceChild
复制: clone
创建: createElemnet
查找子节点: getElemntById

如何阻止事件冒泡和默认事件

阻止事件冒泡:出现的场景通常是两个盒子都有触发事件,e.stopPropagation()和e.cancelBubble = true
默认事件:e.preventDefault和e.returnValue = false

new操作符具体干了什么呢?

  1. 创建一个空对象: 并且this变量引入该对象,同时还继承了函数的原型var obj=new Object();
  2. 设置原型链 空对象指向构造函数的原型对象obj.__proto__= Func.prototype;
  3. 执行函数体 修改构造函数this指针指向空对象,并执行函数体var result =Func.call(obj);
  4. 判断返回值 返回对象就用该对象,没有的话就创建一个对象if (typeof(result) == "object"){ func=result; } else{ func=obj;; }

JS延迟加载的几种方式有哪些?

  1. defer 属性
  2. async 属性
  3. 动态创建DOM方式
  4. 使用jQuery的getScript方法
  5. 使用setTimeout延迟方法
  6. 让JS最后加载

什么是“use scrict”使用它的好处和坏处分别是什么?

use scrict是严格模式,解决一些js的怪癖行为的
好处

  1. 提高编译器效率,增加运行速度;

  2. 消除代码运行的一些不安全之处,保证代码运行的安全;

  3. 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

  4. 为未来新版本的Javascript做好铺垫。

  5. 检测代码的,压缩的节约文件大小
    坏处:
    阻塞后面代码的运行,压缩出现错误
    现在网站的 JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值