前端2020年热门面试题精选
数组去重(手写)
1,根据对象属性的不重复去重
function unique(a){
var arr = []
var obj = {}
for(let i = 0;i<a.length;i++){
//判断对象中是否有这个属性
if(!obj[a[i]]){
obj[a[i]] = 'asd'
// arr[arr.length] = a[i]
arr.push(a[i])
}
}
return arr
}
var oldArr = [1,3,5,2,51,4,6,2,1,4,5,23,3]
console.log(unique(oldArr));
js的new做了哪些事情
1,在内存中创建一个新的对象
2,让this指向这个新的对象
3,执行构造函数中的代码
4,return
数组常用方法
push():在数组的最后添加一个或多个元素,原数组改变
,pop():删除最后一个元素,若数组为空 则返回undefined 原数组改变
,shift():删除第一项,并返回被删除的元素 若数组为空 返回undefined 改变原数组
,unshift():在数组的开头添加一个或多个元素 并返回数组长度 原数组改变,
splice():,sort(),reverse(),mop()
string常用方法:
方法 | 说明 |
---|---|
concat(str1,str2…) | 连接一个或多个字符串 返回一个新的字符串 |
substr(start,length) | 从start位置开始(start为索引) 区 length个字符 |
slice(start,end) | 从start开始 到end结束 取不到end(两个都是索引)接受负值 |
substring(start,end) | 从start开始 到end结束 取不到end(两个都是索引) 不接受负值 |
split() | **切割字符串 ** 注意,切割完毕之后,返回的是一个新数组 |
清除浮动
1, 在父级元素 后添加一个空div
2,.clearfix
3,给父级添加over-flow:hidden
p标签的作用:
让一段文字具有段落的语义
闭包有什么用
什么是闭包?
闭包是指有权访问另一个函数作用域中的变量的函数
闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在。
为什么要用?
1,匿名自执行函数:有的函数只需执行一次,内部的变量不需维护 ,可以用闭包
2,结果缓存:闭包不会释放外部的引用,从而函数内部的值可以保留
3,封装:实现类和继承的封装
mouseover和mouseenter的区别
mouseover:当鼠标移入一个元素或其他子元素都会触发的事件,所以有一个重复触发,冒泡的过程,对应的移除事件是mouseout
mouseenter:当鼠标移出元素本身(不包含子元素)触发的事件,也就是不会冒泡,对应的移除事件是mouseleave
如何判断一个数组和类数组
1.instanceof
console.log(arr instanceof Array)
2,constructor
console.log(arr.constructor)
3,isArray()
call和apply的区别
每个函数都包含两个非继承而来的方法:apply()和call()。;
call与apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性;
call():第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。在使用
call()方法时,传递给函数的参数必须逐个列举出来。
apply():传递给函数的是参数数组
阐述一下CSS Sprites及其优点
优点:1,减少对服务器的请求,从而大大提升页面性能
2减少图片的字节(图片大小)
什么是闭包,如何使用它,为什么要使用它?